考虑以下代码:
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中的一个错误,因为第一步应该删除非varargs doIt,因为它根据section 6.6.1是不可访问的。我是否在查找算法中遗漏了其他一些细节,或者这显然是错误的,因为我认为它是?
答案 0 :(得分:4)
你没有遗漏任何东西。 这是一个已知的错误。
如Qwe所述,这里有一个指向相应错误文件的链接: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6746184