考虑以下代码:
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("");
}
}
Run Code Online (Sandbox Code Playgroud)
使用javac版本1.6.0_29,它无法编译,说明:
VarArgsError.java:14: doIt(java.lang.String) has private access in Foo
new Foo().doIt("");
^
1 error
Run Code Online (Sandbox Code Playgroud)
是的,这是愚蠢的代码,至少有两个明显的解决方法,但我很好奇.根据规范的第15.12.2节,这个编译错误似乎是javac中的错误,因为第一步应该删除非varargs doIt,因为它根据6.6.1节是不可访问的.我在查找算法中遗漏了一些其他细节,或者这显然是错误的,因为我认为它是?