函数式编程实现动态调用模型类的set和get方法

痛点说明

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 madeFruitSalad(T apple, Function getName,
        BiConsumer setName, Supplier supplier) {
        // 调用get方法
        System.out.println("调用get方法--------------" + getName.apply(apple) + "--------");
        // 实例化一个空模型
        T model = supplier.get();
        // 调用set方法
        setName.accept(model, getName.apply(apple) + "沙拉");
        return model;
    }
控制台输出
控制台输出
实现概要
  1. 函数式编程中的Function+实例对象实现了动态调用get方法
  2. BiConsumer+实例对象实现了动态调用set方法
  3. Supplier实现了动态生成实例对象
参考链接

通过Java的反射动态调用类的set和get方法
java8的新特性-方法引用
Java8-函数式编程

你可能感兴趣的:(函数式编程实现动态调用模型类的set和get方法)