zoukankan      html  css  js  c++  java
  • Java Enum

    java1.5+引入Enum,这样就可以将一类有共性的定义,放在一起,也容易被调用。不用在CommonConstants中定义public static final *****

    不过Enum编译后的文本也是public static final *****这种形式。

    个人的理解:Enum中定义的常量有点像定义的类,Enum的类名就如同类的集合一样,不带参数时,就如同默认的不带参的构造器一样。

          带参时,就需要带参构造器。因枚举是一种常量定义,因此需要全大写。

    public enum FruitEnum {
        APPLE, PEAR, ORANGE, GRAPE;
        // 可写可不写,默认的
        private FruitEnum() {
        }
    }

    带参的形式:

    public enum FruitEnum {
        APPLE("苹果", "西安"), PEAR("梨子", "山西"), ORANGE("橘子", "广元"), GRAPE("葡萄", "吐鲁番");
        /** 水果名字 **/
        private String fruitName;
        /** 产地 **/
        private String place;
        // 带参时必须写
        private FruitEnum(String fruitName,String place) {
            this.fruitName = fruitName;
            this.place = place;
        }
        
        public String getFruitName() {
            return fruitName;
        }
        public void setFruitName(String fruitName) {
            this.fruitName = fruitName;
        }
        public String getPlace() {
            return place;
        }
        public void setPlace(String place) {
            this.place = place;
        }
        
    }

     调用方法:

    System.out.println(FruitEnum.GRAPE.getFruitName());
    System.out.println(FruitEnum.GRAPE.getPlace());

     实际编译后的文本:

      因反编译软件无法看到内部的参数结构,只能通过点击class看结构,从这个结构可以看出每个常量实际都是重新new FruitEnum。

         34  new FruitEnum [1]
         37  dup
         38  ldc <String "ORANGE"> [36]
         40  iconst_2
         41  ldc <String "橘子"> [37]
         43  ldc <String "广元"> [39]

    但是在switch调用内部内容时报出 case expressions must be constant expressions:错误无法编译通过 

    要求switch的内容必须是final才可以。因此只能调用枚举。可以通过switch的内容先反找到枚举,再进行case..when。

  • 相关阅读:
    苏州大学2017年复试试题
    四川大学2019年复试试题
    四川大学2009年复试试题
    华东师范大学2019年复试试题
    华东师范大学2018年复试试题
    华东师范大学2017年复试试题
    华东师范大学2016年复试试题
    中国科学院大学2020年高等代数考研试题
    中国科学院大学2020年数学分析考研试题
    中国科学技术大学2020年高等代数考研试题
  • 原文地址:https://www.cnblogs.com/DennyZhao/p/8397477.html
Copyright © 2011-2022 走看看