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>

 

posted @ 2020-07-04 23:15  chxLonely  阅读(634)  评论(0编辑  收藏  举报