For investors

股价:

5.36 美元 %

认识达内从这里开始

认真做教育 专心促就业

深入理解 Java 枚举类型(二)
  • 发布:潍坊IT培训
  • 来源:互联网
  • 时间:2018-07-18 17:16
    自动生成的 values 和 valueOf-潍坊IT培训负责整理
    Java 编译枚举类型时,自动加上两个静态方法 values 和 valueOf.如果我们定义了签名完全相同的方法会编译报错 "已在枚举中定义了方法 values".
    枚举类型使用私有静态变量 $VALUES 存储所有的值,在静态初始化中赋值,类型为数组,值为所有枚举值,用于 values 和 valueOf 方法.
    values 方法的作用是返回所有枚举值,实现很简单,就是 clone 一下 $VALUES 的值.valueOf 方法的作用是根据枚举值的名称返回枚举值,实现方法是调用 Enum.valueOf 方法,后文会在 Enum 类型中介绍这个方法.
    Enum 类型

    Enum 类型是 Java 中所有枚举类型的父类,并且是抽象类.需要注意的是我们不能直接继承 Enum 类,只有编译器生成的枚举最终的 class 可以继承,直接继承会导致编译器报错 "类无法直接扩展 java.lang.Enum".

潍坊IT培训

    Enum 类型提供了我们常用的 name() 和 ordinal() 方法,其中的 name 和 ordinal 变量都是 final 类型.
    private final String name;public final String name() { return name;}private final int ordinal;public final int ordinal() { return ordinal;}
    Enum 拥有一个构造器,参数为 name 和 ordinal.经过前面的分析可以知道,这个构造器我们是没有办法直接调用的,只有编译器编译的枚举类型可以调用.
    protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal;}
    Enum 定义了一个 valueOf 方法,用于枚举类型调用.可以看到 SexTwo 中的 valueOf 方法就是调用 Enum.valueOf(SexTwo,s) 实现的.
    public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) { T result = enumType.enumConstantDirectory().get(name); if (result != null) return result; if (name == null) throw new NullPointerException("Name is null"); throw new IllegalArgumentException( "No enum constant " + enumType.getCanonicalName() + "." + name);}
    Enum 中的大部分方法都是 final 类型的,因此枚举类型是没有办法覆盖这些方法的,唯一能够覆盖的就是 toString 方法.
    枚举 与 Class
    前面我们已经看到,values 方法是编译器自动加到枚举类型上的,而 Enum 类型并没有提供 values 方法,也就是说我们把枚举类型向上转型为 Enum 类型后没法调用 values 方法.或者我们可能需要传递 Class 对象进行反射操作,这种情况下如何操作枚举呢?
    Class 对象的 isEnum() 方法可以用来判断是否是枚举类型,如果是枚举类型该方法返回 true.Class 对象的 getEnumConstants() 方法可以用来获取所有枚举值.
    以上就是潍坊IT培训给大家做的内容详解,更多关于IT的学习,请继续关注潍坊IT培训
<  上一篇:深入理解 Java 枚举类型(一)
下一篇:深入理解 Java 枚举类型(三)  >
相关推荐
最新资讯
免费试听课程
  • 全部课程
  • IT课程
  • 设计课程
  • 运营课程
Free courses
最新开班时间
  • 北京
  • 上海
  • 广州
  • 深圳
  • 南京
  • 成都
  • 武汉
  • 西安
  • 青岛
  • 天津
  • 杭州
  • 重庆
  • 厦门
  • 哈尔滨
  • 济南
  • 福州
  • 沈阳
  • 合肥
  • 郑州
  • 长春
  • 苏州
  • 大连
  • 长沙
  • 昆明
  • 温州
  • 太原
  • 南昌
  • 无锡
  • 石家庄
  • 南宁
  • 中山
  • 兰州
  • 佛山
  • 珠海
  • 宁波
  • 贵阳
  • 保定
  • 呼和浩特
  • 东莞
  • 洛阳
  • 潍坊
  • 烟台
  • 运城
  • 开课名称
  • 开班时间
  • 抢座
  • 咨询
  • 开课名称
  • 开班时间
  • 抢座
  • 咨询
预约申请试听课
收起