具有空参数的 Java 方法调度
2022-09-04 07:18:22
为什么(显然)我是直接作为参数传递,还是传递我分配的值?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的第二个答案中的评论。谢谢大家的帮助。