日常调戏Java:类和对象的函数式实现

定义

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"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值