如何确定JDK8 lambda是否可以分配给类型?

时间:2014-03-03 07:26:38

标签: java lambda java-8

编辑:这个问题格式不正确到我无法解决的问题,并且是我项目中的某个地方的错误。我的问题的根本原因是myLambda.getClass()不应该抛出ClassNotFoundException,并且lambda按预期工作。

给定接口的类

Class myIf = MyIf.class;

还有一个lambda实例

Object myLambda;

如何在不抛出异常的情况下确定myLambda是否可以分配给MyIf?这有点令人费解,因为myLambda.getClass()抛出异常。 "显而易见"

myIf.isInstance(myLambda) 

返回false

1 个答案:

答案 0 :(得分:5)

如果我的假设不正确,请再次纠正我,但你会照常做到

static Class<?> clazz = MyIf.class;

public static void main(String[] args) throws Exception {
    method(() -> System.out.println("hello")); // lambda

}

public static void method(MyIf myIf) { 
    System.out.println(clazz.isAssignableFrom(myIf.getClass()));
}

static interface MyIf {
    public void execute();
}

打印

true

您实际上并没有获得对lambda表达式的引用,编译器会生成一个(合成?)类,并将其实例传递给您的方法。