java8类型推导,Java 8 Lambdas上的反射类型推断

12f5d5adcfcd75ecd5ff231291d25ce7.png

慕瓜9086354

参数化类型信息仅在运行时可用于绑定的代码元素-即专门编译成类型的代码元素。Lambda执行相同的操作,但是由于Lambda不支持方法而不是类型,因此没有类型可以捕获该信息。考虑以下:import java.util.Arrays;import java.util.function.Function;public class Erasure {    static class RetainedFunction implements Function {        public String apply(Integer t) {            return String.valueOf(t);        }    }    public static void main(String[] args) throws Exception {        Function f0 = new RetainedFunction();        Function f1 = new Function() {            public String apply(Integer t) {                return String.valueOf(t);            }        };        Function f2 = String::valueOf;        Function f3 = i -> String.valueOf(i);        for (Function f : Arrays.asList(f0, f1, f2, f3)) {            try {                System.out.println(f.getClass().getMethod("apply", Integer.class).toString());            } catch (NoSuchMethodException e) {                System.out.println(f.getClass().getMethod("apply", Object.class).toString());            }            System.out.println(Arrays.toString(f.getClass().getGenericInterfaces()));        }    }}f0并f1按照您的期望保留了它们的通用类型信息。但是由于它们是未绑定的方法,因此已被擦除为Function,f2而f3不是。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值