为什么将null转换为Object?

Tom*_*sky 23 java null

我发现一些代码我工作的地方的点null被强制转换Object,因为它是传递给方法.

为什么要这样做?

我知道这个问题涉及重载方法,并使用强制转换来确定要调用的方法版本.

但是如果没有执行强制转换,Object如果使用null参数调用该方法,那么如果选择的参数类型的重载方法不会超过该方法的任何其他匹配版本吗?那么演员还能做些什么呢?

Joa*_*uer 39

如果演员表没有演出,那么将选择最具体的版本.

null可以是类型String或类型的空引用Object.因此,如果这两种方法可用,那么String将调用该方法.

如果你有方法Object,Integer String随后调用与null(无投)将给出一个编译错误,因为IntegerString都是有效的,同样特定(即没有一个其他的一个特例).在这种情况下,您必须强制转换null以指定要调用的方法.


Luk*_*der 14

" Object方法"始终是所有"适用方法"中的"最不具体"方法.这就是为什么编译器不会选择它.

如果你跑

String.valueOf(null);
Run Code Online (Sandbox Code Playgroud)

然后编译器可以选择两个"适用的方法".你实际上是在调用更具体的方法

String.valueOf((char[]) null);
Run Code Online (Sandbox Code Playgroud)

哪个会给你一个NullPointerException.为了调用另一个方法,写

String.valueOf((Object) null);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您只使用一个"适用的方法",因此您不会遇到"更具体"的不同重载方法的问题.