- 定义一个接口如下
@FunctionalInterface
public interface Action<T, V> {
/**
* 执行操作
*
* @param param 入参
* @return 返回参数
*/
V execute(T param);
}
- 定义一个使用该接口的类
在构造函数中看一下action参数的具体类型
public class FlowNode {
public FlowNode(String name, Action<?, ?> action) {
Class<?> clz = action.getClass();
this.name = name;
this.action = action;
this.next = new ArrayList<>();
}
......
- 匿名传入Acrtion
方式一:lambda表达式
FlowNode two = new FlowNode("two", (Action<Boy, Girl>) boy -> {
boy.setAge(boy.getAge() + 1);
System.out.println("第 3 个节点------参数:" + boy);
Girl girl = new Girl();
BeanUtils.copyProperties(boy, girl);
return girl;
});
方式二:匿名对象,其实和lambda是一样的
FlowNode two = new FlowNode("two", new Action<Boy, Girl>() {
@Override
public Girl execute(Boy boy) {
boy.setAge(boy.getAge() + 1);
System.out.println("第 3 个节点------参数:" + boy);
Girl girl = new Girl();
BeanUtils.copyProperties(boy, girl);
return girl;
}
});
如图所示,是获取不到具体的类型的,就没法通过反射做一些事情
image.png
网友评论