定义
static Function<String, ?> defClass() {
Map<String, Object> map = new HashMap<>();
return (name) -> { //传入的操作名
if ("new".equals(name)) { //创建对象
HashMap<String, Object> objectMap = new HashMap<>(map);
return (Function) (arg) -> {
if ("get".equals(arg)) //获取field的内容
return (Function) (fieldName) -> objectMap.get(fieldName);
else if ("set".equals(arg)) //设置field的内容
return (Function<String, ?>) (fieldName) -> (Consumer) (value) -> objectMap.put(fieldName, value);
else if ("invoke".equals(arg)) //调用类的方法
return (Function) (methodName) -> objectMap.get(methodName);
return null;
};
} else if ("method".equals(name)) //添加方法
return (Function<String, ?>) (methodName) -> (Function) (method) -> map.put(methodName, method);
return null;
};
}
使用
/* 1. 定义一个类 */
Function<String, ?> aClass = defClass();
/* 2. 给这个类添加一个方法test,打印参数a到控制台 */
((Function) ((Function) aClass.apply("method")).apply("test")).apply((Consumer) a -> System.out.println("test:" + a));
/* 3. 给这个类添加一个方法test2,把参数a和b相加,然后返回*/
((Function) ((Function) aClass.apply("method")).apply("test2")).apply((Function<Integer, ?>) a -> (Function<Integer, ?>) b -> {
System.out.println("a + b = " + (a + b));
return a + b;
});
/* 4. 创建该类的对象 */
Function obj = (Function) aClass.apply("new");
/* 5. 调用test方法,参数为3 */
((Consumer) (((Function) obj.apply("invoke")).apply("test"))).accept(3);
/* 6. 调用test2方法,参数为3和5 */
System.out.println("test2:" + ((Function) ((Function) ((Function) obj.apply("invoke")).apply("test2")).apply(3)).apply(5));
/* 7. 设置属性name为XiaoMing */
((Consumer) ((Function) obj.apply("set")).apply("name")).accept("XiaoMing");
/* 8. 读取属性name并打印 */
System.out.println("get name:" + ((Function) obj.apply("get")).apply("name"));
版权声明:本文为zssrxt原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。