考虑这段代码:
class Foo {
public void doIt(String... strs) {
System.out.println("this is varargs");
}
private void doIt(String str) {
System.out.println("this is single");
}
}
class Bar {
public static void main (String[] args) {
new Foo().doIt("");
}
}
javac 1.6.0_29版本编译失败,提示:
VarArgsError.java:14: doIt(java.lang.String) has private access in Foo
new Foo().doIt("");
^
1 error
是的,这是愚蠢的代码,至少有两个明显的解决方法,但我很好奇。基于 section 15.12.2 of the specification ,这个编译错误似乎是 javac 中的一个错误,因为第一步应该删除非可变参数 doIt,因为根据 section 6.6.1 无法访问它.我是否在查找算法中遗漏了一些其他细节,或者这是否像我认为的那样明显错误?
最佳答案
你没有错过任何东西。 这是一个已知的错误。
作为 Qwe评论,这里是一个适当的错误归档的链接: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6746184
关于java - 重载解析应该选择私有(private)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9370700/