为什么(显然)我null
是直接作为参数传递,还是传递Object
我分配的值 null
?
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 的第二个答案中的评论。)感谢大家的帮助。