美文网首页程序员
java基础系列之枚举

java基础系列之枚举

作者: _palm | 来源:发表于2015-11-07 23:11 被阅读135次

enum 是java中一个特殊的类,说她特殊大概有以下几点:

  1. 构造方法不能使用public修饰,只能是default 或者private;
  2. 不能使用关键字new 实例化对象;
  3. 默认实例对象也是该对象的值.
    但是枚举[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对象:

  1. public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

  2. 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");*/
    }
}


  1. v1.5,v1.8

相关文章

网友评论

    本文标题:java基础系列之枚举

    本文链接:https://www.haomeiwen.com/subject/cabchttx.html