痛点说明
Java模型类的使用大大提升了代码的阅读性,在抽出公共操作方法时,虽然可以用泛型解决了模型入参的问题,但是如何动态调用set/get方法却成了难点。
目前网上资料绝大多数实现动态调用类的get/set都是通过类的反射来实现的,其实完全可以通过方法引用+函数式编程来实现,简洁易懂。
代码示例
public static void main(String[] args) {
Fruit apple = new Fruit("苹果");
// 苹果加工成水果沙拉
Fruit fruitSalad = madeFruitSalad(apple, Fruit::getName, Fruit::setName, Fruit::new);
System.out.println("打印fruitSalad-----------" + fruitSalad + "---------");
}
private static <T> T madeFruitSalad(T apple, Function<T, String> getName,
BiConsumer<T, String> setName, Supplier<T> supplier) {
// 调用get方法
System.out.println("调用get方法--------------" + getName.apply(apple) + "--------");
// 实例化一个空模型
T model = supplier.get();
// 调用set方法
setName.accept(model, getName.apply(apple) + "沙拉");
return model;
}
控制台输出
实现概要
- 函数式编程中的Function+实例对象实现了动态调用get方法
- BiConsumer+实例对象实现了动态调用set方法
- Supplier实现了动态生成实例对象