Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用私有成员参数化泛型类型_Java_Generics_Class Visibility - Fatal编程技术网

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 {}
}