为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不能在 Java 中调用空指针上的方法?

为什么不能在 Java 中调用空指针上的方法?

Go
冉冉说 2021-06-17 18:15:33
在 Go 中,可以在空指针上调用方法,只要该指针永远不会被取消引用:type empty struct{}func (e *empty) Allocated() bool { return e != nil }(对于可运行的代码,请单击此处)然而,在 Java 中,在空指针上调用方法,即使该方法从不取消对任何成员变量的引用,仍然会导致空指针异常:class Test {    public boolean Allocated() { return this != null; }}有人知道为什么存在这种行为吗?它有什么好处吗?想法?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

这是因为所有 Java 方法都是虚拟的。

编写时someInstance.Allocated(),运行时需要检查是否someInstance实际上是覆盖该方法的派生类型。

从理论上讲,此限制本可以针对finalprivate方法放宽。
我假设语言设计者选择不这样做是为了一致性。(因此删除final不会是一个重大变化)



查看完整回答
反对 回复 2021-06-21
?
MM们

TA贡献1886条经验 获得超2个赞

我认为这是一个哲学问题;方法(静态方法除外)就其本质而言适用于对象,并且在这种范式中调用像“null”这样的非对象上的方法是没有意义的。如果您想定义一个可以应用于对象或“null”的方法,那么定义一个静态方法就足够容易了,而且在我看来,这将使调用该方法的代码不会让读者感到困惑。


查看完整回答
反对 回复 2021-06-21
  • 3 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信