При создании класса с обобщенным типом c представляется невозможным использовать закрытый класс в качестве параметра типа, даже если этот класс является внутренним классом обобщенного типа c. Рассмотрим следующий код:
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
.