1. import java.util.stream.IntStream;
  2. enum MyEnum {
  3. RUN("RUN"),
  4. STAND("STAND"),
  5. JUMP("JUMP");//必须先定义属性,并且以分号结尾
  6.  
  7. private String description;
  8. //有参数的构造函数
  9. private MyEnum(String description) {
  10. this.description = description;
  11. }
  12. @Override
  13. public String toString() {
  14. return this.name() + "{" +
  15. "description=\'" + description + \'\\'\' +
  16. \'}\';
  17. }
  18. }
  19. public class EnumClass {
  20. public static void main(String[] args) {
  21. MyEnum[] values = MyEnum.values();
  22. //输出重写的toString方法
  23. System.out.println(MyEnum.JUMP.toString());

 MyEnum one = MyEnum.JUMP;
 MyEnum two = MyEnum.JUMP;

//两个比较说明是同一引用
 System.out.println(one.equals(two));//true

  1. IntStream.range(0, values.length).forEach(a -> {
  2. //直接输出枚举的定义名
  3. System.out.print(values[a] + " ");
  4. //也是输出枚举的定义名
  5. System.out.print(values[a].name() + " ");
  6. //输出对比结果,是按照其索引值相减的结果判断是否一致的,相同返回0。
  7. System.out.print(values[a].compareTo(MyEnum.JUMP) + " ");
  8. //equals源码中直接用的==号相比的,因为枚举存放在方法区。
  9. System.out.print(values[a].equals(MyEnum.JUMP));
  10. System.out.println("-------------------------------");
  11. });
  12. }
  13. }

 有个注意点,枚举的values方法并不是java.lang.Enum类提供的,而是编译时编译器加上去的。可以通过反射查看MyEnum的所有方法和Enum类的方法做比较,可以看到Enum并没有values方法。

  1. public void testRole(){
  2. String exception = "(a>5)?b*1:c";
  3. Expression compile = AviatorEvaluator.compile(exception);
  4. Map map = new HashMap<String, Object>();
  5. map.put("a", 1);
  6. map.put("b", 200);
  7. map.put("c",300);
  8. Integer result = (Integer) compile.execute(map);
  9. System.out.println(result);
  10. }

需要引入的pom文件如下:

  1.     <dependency>
  2. <groupId>com.googlecode.aviator</groupId>
  3. <artifactId>aviator</artifactId>
  4. <version>4.2.7</version>
  5. </dependency>

 

版权声明:本文为chxwkx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chxwkx/p/13237165.html