如果还有method(char[] a)
而不是生成模糊方法错误,为什么Java会为method(null)
执行method(Object a)
?
尝试使用静态方法String.valueOf()
构建字符串时......我面对这种情况。请参阅下面的自解释运行示例:
public class NotSoClearNullPointerException {
public static void main(String[] args) {
NotSoClearNullPointerException instance = new NotSoClearNullPointerException ();
instance.algo(null);
String str = String.valueOf(instance.getANull());
System.out.println ("This actually is beign send to stdout : " + str);
str = String.valueOf(null);
System.out.println ("We never gonna make it to stdout!! : " + str);
}
public Object getANull() {
return null; // the hardest method i ever wrote... xD
}
}
检查String class的来源后,我看到String.valueOf(Object)方法是空的安全!!,所以String.valueOf(null)
实际上并没有调用String.valueOf(Object)
方法,而是调用另一个重载方法..我猜是调用String.valueOf(char[])
,知道每个数组(尽管base type
)是一个对象。
我非常肯定这是因为我自己做了测试,再次准备好运行代码 -
public class ArgumentDispatchExample {
public static void main(String[] args) {
ArgumentDispatchExample instance = new ArgumentDispatchExample ();
instance.method(null);
}
public void method (Object a) {
System.out.println("Object");
}
public void method (char[] a) {
System.out.println("char[]");
}
}
假设我是对的...(顺便说一句,这是问题的一部分......),我一直认为这个调用必须产生一个模糊的错误,因为如果编译器必须关联“ null“到一个Object或char []实例。
Java不支持双调度(即解析调用实际类型参数的调用方法),那么在这里使用什么样的规则来决定将null作为char []?我的一生,我的事物是null更接近于对象“事物”,而不是其他类型的抽象。
哪种类型的“更多”与空值相关联?
我急切地等待答案!!
素不相识。
维克多
P.D。:作为HPO(谦逊的个人观点)......难道我们不同意这有点令人困惑,特别是如果你看第一个例子......?也许,这是一个很好的起点,可以在java社区中进行辩论。 非常感谢!。