创建具有泛型类型的类时,似乎不可能使用私有类作为类型参数,即使该类是泛型类型的内部类也是如此。考虑这个代码:
import java.util.Iterator;
import test.Test.Type;
public class Test implements Iterable<Type> {
@Override
public Iterator<Type> iterator() {return null;}
static class Type {}
}
上面的例子编译,而当Type
为私有时,相同的例子不编译:
import java.util.Iterator;
// ERROR: The type test.Test.Type is not visible
import test.Test.Type;
// ERROR: Type cannot be resolved to a type
public class Test implements Iterable<Type> {
@Override
// ERROR: The return type is incompatible with Iterable<Type>.iterator()
public Iterator<Type> iterator() {return null;}
private static class Type {}
}
为什么不可能使用私有类作为其封闭类的类型参数?即使是私有的,在我看来,类Type
应该在类Test
中可见。
我可以假设这是因为如果您将Type设置为privat,则无法获得迭代器((的结果,因为Type是看不见的。我可能错了。
这是因为Test
类之外的任何代码都不能访问Type
。
如果您将返回Iterator
的方法限制为私有可见性,它将编译:
import java.util.Iterator;
public class Test {
public void doTest() {
Iterator<Type> it = iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
private Iterator<Type> iterator() {
return null;
}
private static class Type {}
}