enum 是java中一个特殊的类,说她特殊大概有以下几点:
- 构造方法不能使用public修饰,只能是default 或者private;
- 不能使用关键字new 实例化对象;
- 默认实例对象也是该对象的值.
但是枚举[enum] 也可以有抽象方法,也可以实现接口或者继承抽象类.
比如以下代码:
enum Grad {
A("90-100"){
@Override
public String getValue(String local) {
if ("en".equals(local)) {
return "90-100" ;
}
return "优";
}
},
B("80-89"){
@Override
public String getValue(String local) {
if ("en".equals(local)) {
return "80-89" ;
}
return "良好";
}
},
C("70-79") {
@Override
public String getValue(String local) {
if ("en".equals(local)) {
return "70-79" ;
}
return "一般";
}
},
D("60-69"){
@Override
public String getValue(String local) {
if ("en".equals(local)) {
return "60-69" ;
}
return "差";
}
},
E("0-59"){
@Override
public String getValue(String local) {
if ("en".equals(local)) {
return "0-59" ;
}
return "不及格";
}
} ;
private String value ;
Grad(String value) {
this.value = value ;
}
public abstract String getValue(String local) ;
}
public class EumDemo {
public static void main(String[] args) {
System.out.println(Grad.A.getValue("en"));
/*new Grad("9-12") {
@Override
public String getValue(String local) {
return "这不是自带元素";
}
}.getValue("cn");*/
}
}
以上代码展示了enum
可以拥有抽象方法的特性,同时也只有她才能有,如果普通类则不能模仿,因为普通方法中只要存在一个抽象方法,则该类为抽象类,则必须申明为抽象的。即abstract class
。
通过查询api我们可以看到enum可以将一个一个字符串转化为一个枚举对象,但是需要注意的是这个字符串是有限制的,enum 提供了两个方法将字符串转化为enum对象:
-
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
-
public static Grad valueOf(String name) throws IllegalArgumentException
其中,第一个方法是Enum提供,第二个不是[1],
例如:
public class EumDemo {
public static void main(String[] args) {
// System.out.println(Grad.A.getValue("en"));
// Grad.A.fun() ;
Grad g = Grad.valueOf(Grad.class,"B") ;
// Grad g = Grad.valueOf(Grad.class,"F") ;
Grad g1 = Grad.valueOf("B") ;
System.out.println(g.getValue("en"));
/*new Grad("9-12") {
@Override
public String getValue(String local) {
return "这不是自带元素";
}
}.getValue("cn");*/
}
}
网友评论