JAVA各个组件总结
学习JAVA过程中的笔记
一、枚举添加新方法并在main方法中运用
import java.util.stream.IntStream; enum MyEnum { RUN("RUN"), STAND("STAND"), JUMP("JUMP");//必须先定义属性,并且以分号结尾 private String description; //有参数的构造函数 private MyEnum(String description) { this.description = description; } @Override public String toString() { return this.name() + "{" + "description='" + description + '\'' + '}'; } } public class EnumClass { public static void main(String[] args) { MyEnum[] values = MyEnum.values(); //输出重写的toString方法 System.out.println(MyEnum.JUMP.toString());
MyEnum one = MyEnum.JUMP;
MyEnum two = MyEnum.JUMP;
//两个比较说明是同一引用
System.out.println(one.equals(two));//true
IntStream.range(0, values.length).forEach(a -> { //直接输出枚举的定义名 System.out.print(values[a] + " "); //也是输出枚举的定义名 System.out.print(values[a].name() + " "); //输出对比结果,是按照其索引值相减的结果判断是否一致的,相同返回0。 System.out.print(values[a].compareTo(MyEnum.JUMP) + " "); //equals源码中直接用的==号相比的,因为枚举存放在方法区。 System.out.print(values[a].equals(MyEnum.JUMP)); System.out.println("-------------------------------"); }); } }
有个注意点,枚举的values方法并不是java.lang.Enum类提供的,而是编译时编译器加上去的。可以通过反射查看MyEnum的所有方法和Enum类的方法做比较,可以看到Enum并没有values方法。
二、JAVA动态规则的执行。
public void testRole(){ String exception = "(a>5)?b*1:c"; Expression compile = AviatorEvaluator.compile(exception); Map map = new HashMap<String, Object>(); map.put("a", 1); map.put("b", 200); map.put("c",300); Integer result = (Integer) compile.execute(map); System.out.println(result); }
需要引入的pom文件如下:
<dependency> <groupId>com.googlecode.aviator</groupId> <artifactId>aviator</artifactId> <version>4.2.7</version> </dependency>