应该重载分辨率选择私有方法吗?

时间:2012-02-21 00:59:57

标签: java

考虑以下代码:

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是不可访问的。我是否在查找算法中遗漏了其他一些细节,或者这显然是错误的,因为我认为它是?

1 个答案:

答案 0 :(得分:4)

你没有遗漏任何东西。 这是一个已知的错误。

Qwe所述,这里有一个指向相应错误文件的链接: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6746184