从网上看到jdk.5新特性中枚举的介绍,大部分内容都能理解唯独是定义枚举值自己的方法,有点琢磨不透请各位指点指点!!RED中的toString()怎么样被调用呢?? 前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。 public enum Color {
Red {
public String toString(){
return "Color.Red";
}
},
Green {
public String toString(){
return "Color.Green";
}
},
Blue{
public String toString(){
return "Color.Blue";
}
};
}
Red {
public String toString(){
return "Color.Red";
}
},
Green {
public String toString(){
return "Color.Green";
}
},
Blue{
public String toString(){
return "Color.Blue";
}
};
}
或者说把例子里面的toString()改名为saiHi()看看这样能调出来saiHi()吗,答案是不能的。
public enum Color {
Red {
public String saiHi() {
return "Color.Red";
}
},
Green {
public String saiHi() {
return "Color.Green";
}
},
Blue {
public String saiHi() {
return "Color.Blue";
}
};
public String saiHi() {
return "Color" ;
}
public static void main(String[] args) {
System.out.println(Color.Red.saiHi());
}
}
这样就行了。
因为每一个枚举值实际上是该枚举的一个实例。
如果你Color类中没有saiHi(),他的实例也就不会有saiHi();
你可以用javap Color
就可以看到public class Color extends java.lang.Enum{
public static final Color Red;
public static final Color Green;
public static final Color Blue;
static {};
public java.lang.String saiHi();
public static void main(java.lang.String[]);
public static Color[] values();
public static Color valueOf(java.lang.String);
Color(java.lang.String, int, Color);
}
public String sayHi() {
return "Color.Red";
}
}, Green {
public String sayHi() {
return "Color.Green";
}
}, Blue {
public String sayHi() {
return "Color.Blue";
}
};
public abstract String sayHi();
}
private Color(){
}
public final static Color Red = new Color() {
public String sayHi() {
return "Color.Red";
}
};
public final static Color Green = new Color() {
public String sayHi() {
return "Color.Green";
}
};
public final static Color Blue = new Color() {
public String sayHi() {
return "Color.Blue";
}
};
public abstract String sayHi();
}
调用方法就是楼上说的啦
color.toString(); //调用toString方法http://hxraid.javaeye.com/admin/blogs/477731 上面写的很清楚