定义
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))
return (Function) (fieldName) -> objectMap.get(fieldName);
else if ("set".equals(arg))
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;
};
}
使用
Function<String, ?> aClass = defClass();
((Function) ((Function) aClass.apply("method")).apply("test")).apply((Consumer) a -> System.out.println("test:" + a));
((Function) ((Function) aClass.apply("method")).apply("test2")).apply((Function<Integer, ?>) a -> (Function<Integer, ?>) b -> {
System.out.println("a + b = " + (a + b));
return a + b;
});
Function obj = (Function) aClass.apply("new");
((Consumer) (((Function) obj.apply("invoke")).apply("test"))).accept(3);
System.out.println("test2:" + ((Function) ((Function) ((Function) obj.apply("invoke")).apply("test2")).apply(3)).apply(5));
((Consumer) ((Function) obj.apply("set")).apply("name")).accept("XiaoMing");
System.out.println("get name:" + ((Function) obj.apply("get")).apply("name"));