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>