aspose file tools*
The moose likes Java in General and the fly likes Question related to Enum Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Question related to Enum" Watch "Question related to Enum" New topic
Author

Question related to Enum

Kartik Patel
Ranch Hand

Joined: Sep 12, 2005
Posts: 73
Hi ,
I have 2 questions related to following code
1. How can I access sum(int a , int b) method from main() method?
2. Why I can't make sum method static?

class EnumTest {
static enum test {
FIRSTCLASS("This is First Class") {
String performance() {
return "nisha";
}

// Can we add methods like this in one particular enum - FIRSTCLASS ma add karyu ne aevu..???
void sum(int a, int b) {
final int c = a + b;
System.out.println("this is sum: " + c);
}
};
public String toString() {
return str;
}

test() {

}

test(String s) {
str = s;
}

String str;

abstract String performance();
}

public static void main(String[] args) {

System.out.println(EnumTest.test.FIRSTCLASS);
}
}


Chop your own wood, and it will warm you twice. - Henry Ford
Kartik Patel
Ranch Hand

Joined: Sep 12, 2005
Posts: 73
Can anyone reply to this?
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

For #1: I don't think you can, unless you put an abstract "sum" method into the enum itself. You don't have access to the anonymous classes that implement the individual enum values.

For #2, the error message should be pretty clear -- inner classes can't have static methods. The instance classes of an enum are inner classes.

Finally, note that English is the official language of JavaRanch; if you post anything in another language, you must provide a translation (I can't tell if (and if so, why) you repeated the same thing in two languages above.)


[Jess in Action][AskingGoodQuestions]
Kartik Patel
Ranch Hand

Joined: Sep 12, 2005
Posts: 73
First of all apologize to use some foreign language words in the code. It just happened that I pasted the code from one of my ongoing stuff and I had that weired comment in the code. Next time onwards will take care of it.

But going back to discussion:
I though enums are converted in to static inner class if you have a constant specific body. This means that previous code will get converted in following:

class EnumTest {
static class test {
static class FIRSTCLASS {

// Other code over here..
}
}
}
So if I try to make sum method static. Ideally it should allow. Let me know if my understanding regarding conversion of enums mentioned above is wrong.
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24187
    
  34

I believe you're correct about the value classes being static classes. Note, though, that FIRSTCLASS isn't the name of a value class; the value class is an anonymous class (it ends up in a file named EnumTest$test$1.class). FIRSTCLASS is just the name of a public final static variable in EnumTest.test that holds an instance of the anonymous class; the type of that variable is EnumTest.test . So FIRSTCLASS.sum() wouldn't find the method even if it could be defined, and maybe that's why the compiler won't let you define the method in the first place.
Kartik Patel
Ranch Hand

Joined: Sep 12, 2005
Posts: 73
Very true.Just to add what Friedman is saying,

Above mentioned example got internally converted into
class EnumTest
{
abstract static class test
{
static final EnumTest.test FIRSTCLASS=new EnumTest.test("This is First Class")
{
String performance()
{
return "nisha";
}

void sum(int a, int b)
{
final int c = a + b;
System.out.println("this is sum: " + c);
}
};
public String toString()
{
return str;
}

test() {}

test(String s) {str = s;}
String str;

abstract String performance();
}

public static void main(String[] args) {

System.out.println(EnumTest.test.FIRSTCLASS);
}
}

this means when I want to use sum method using EnumTest.test.FIRSTCLASS.sum(1,1) it is actually trying to access child object using parent reference. It won't be allowed as a method on child object can be executed using parent reference only if that method is available in parent class. In this case sum is not declared in static class and that is why you can not access it.

Thanks Friedman,
It actually clear many doubts about enums for me.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Question related to Enum