gpt4 book ai didi

java - 使用 null 参数调用对任意对象的方法引用时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-03 23:11:26 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Java 8 method reference to class instance method NPE

(2 个回答)


2年前关闭。




我试图创建对任意对象的方法引用,所以我定义了以下类型:

interface I {
boolean get(Impl impl);
}

static class Impl {
public boolean get() {
return true;
}
}

然后我声明了方法引用,如下所示:
I i = Impl::get;

当我打电话时:
i.get(null);

我得到一个 NullPointerException:
Exception in thread "main" java.lang.NullPointerException

有人可以解释为什么会发生这种情况,即使 Impl引用不在任何地方使用?

最佳答案

我想你误解了这行的意思:

I i = Impl::get;
I是一个函数式接口(interface),表示一个采用 Impl 的方法。并返回 boolean , 而 get是一个不带参数并返回 boolean 的方法.这种转换是如何工作的?好吧,编译器意识到 get是一个实例方法,调用它你必须需要一个 Impl目的。这不就像一个在调用之前有参数的函数吗?

所以编译器可以很高兴地推断出你的意思:
I i = impl -> impl.get();

现在 NPE 的原因应该很清楚了。

通常,所有实例方法都可以被认为是带有一个额外参数的静态方法,类型为 T。在哪里 T是该实例方法的声明类型。

关于java - 使用 null 参数调用对任意对象的方法引用时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58697941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com