【问题标题】:How to determine if JDK8 lambda can be assigned to type?如何确定JDK8 lambda是否可以分配给类型?
【发布时间】:2014-03-03 07:26:37
【问题描述】:

编辑:这个问题的格式错误,以至于我无法真正修复它,并且是我项目中的某个错误。我的问题的根本原因是 myLambda.getClass() 不应该抛出 ClassNotFoundException,并且 lambda 按预期工作。

给定接口的类

Class myIf = MyIf.class;

还有一个 lambda 实例

Object myLambda;

如何确定是否可以将 myLambda 分配给 MyIf 而不会引发异常?这有点令人费解,因为 myLambda.getClass() 会引发异常。和“显而易见的”

myIf.isInstance(myLambda) 

返回假

【问题讨论】:

  • 对不起;我对这个问题有点模棱两可;我现在编辑它。我有接口的类
  • 哪个例外?请跟踪堆栈。
  • myLambda.getClass() 抛出 ClassNotFoundException
  • 这不是堆栈跟踪。
  • myIf.isInstance(myLambda) 返回 false,表示 ObjectMyIf 不赋值兼容,因为 Object 不是 MyIf 的子类,意思是:你可以做 @987654329 @但你不能这样做MyIf Y = myObject;

标签: java lambda java-8


【解决方案1】:

如果我的假设不正确,请再次纠正我,但你会像往常一样做

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 表达式的引用,编译器会生成一个(合成?)类,并将它的一个实例传递给您的方法。

【讨论】:

  • 你的 lambda 实例在哪里?
  • () -&gt; System.out.println("hello")
  • @krosenvold 绑定到method(MyIf) 中的参数myIf
  • W00t;这里似乎有某种极端情况。您的代码有效:)
  • @krosenvold 你应该发布一些可复制的东西。只能猜测。
猜你喜欢
  • 2011-12-18
  • 2022-10-04
  • 1970-01-01
  • 2019-01-24
  • 2010-10-13
  • 1970-01-01
相关资源
最近更新 更多