Java 使用私有成员参数化泛型类型
当使用泛型类型创建类时,似乎不可能使用私有类作为类型参数,即使该类是泛型类型的内部类。考虑这个代码:Java 使用私有成员参数化泛型类型,java,generics,class-visibility,Java,Generics,Class Visibility,当使用泛型类型创建类时,似乎不可能使用私有类作为类型参数,即使该类是泛型类型的内部类。考虑这个代码: import java.util.Iterator; import test.Test.Type; public class Test implements Iterable<Type> { @Override public Iterator<Type> iterator() {return null;} static class Type
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
应该在类Test
中可见,我可以假设这是由于这样一个事实,即如果您使用类型privat,则无法获得迭代器()的结果,因为类型是不可见的。我可能错了。这是因为在测试
类之外没有任何代码可以访问类型
如果将返回迭代器的方法限制为私有可见性,它将编译:
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 {}
}
import java.util.Iterator;
公开课考试{
公共空间doTest(){
迭代器it=迭代器();
while(it.hasNext()){
System.out.println(it.next());
}
}
私有迭代器迭代器(){
返回null;
}
私有静态类类型{}
}
您希望迭代器()的调用方如何处理结果?它无法获取结果类型,因为它不可见。这只是一个示例。在我的原始代码中,我创建了一个具有内部中间类型的收集器
,该类型仅用于类本身。我只是试图使示例尽可能简单,以关注行为,而不是有大量不相关的代码行。因此,我选择了我正在查看的Iterable
接口,但没有找到确切的参考,我非常确定T
超出了范围。
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 {}
}