为什么它(显然)有所作为是否我直接传递null
作为参数,或者传递一个Object
,我分配值null
?与null参数的Java方法分派
Object testVal = null;
test.foo(testVal); // dispatched to foo(Object)
// test.foo(null); // compilation problem -> "The method foo(String) is ambiguous"
public void foo(String arg) { // More-specific
System.out.println("foo(String)");
}
public void foo(Object arg) { // Generic
System.out.println("foo(Object)");
}
换句话说,为什么是(注释掉)以foo(...)
秒呼叫没有分派到foo(Object)
?
更新:我使用Java 1.6。我可以毫无问题地编译Hemal的代码,但是我仍然无法编译。我看到的唯一差别是Hemal的方法是静态的,而我的方法不是。但我真的不明白为什么这应该有所作为......?
更新2:已解决。我在我的类中有另一个方法foo(Runnable),所以调度程序不能明确地选择最具体的方法。 (请参阅我在Hemal的第二个回答中的评论。)感谢大家的帮助。
刚刚测试这一点,我目瞪口呆的是,(一)6u11不说这是不明确的,和(b)在空解析字符串不会反对。每天学习新东西 - +1课程。 – 2008-12-18 09:17:32
@Software Monkey:一旦您接受常量null为null类型,并且null类型为所有类型的子类型,这是非常明显的。 Object
2008-12-18 10:16:39