在 Java 中不允许使用通配符 Iterable



我有以下代码设置。但这是不允许的,因为 Iterable 不允许通配符。

public interface CustomInterface extends Iterable<? extends MyBaseType>{....}
CustomTypeA extends MyBaseType{....}
class CustomImpl implements CustomInterface {
List<CustomTypeA> listA = new ArrayList();
@Override
public Iterator<CustomTypeA> iterator() {
return listA.iterator();
}
}

Java实际上试图通过不允许这样做来实现什么? 哪些修改可以使它工作?

创建类实例时,它会调用超类型的初始值设定项。但是您不能使用通配符来创建实例,因此编译器会出错。您必须在此处提供确切的类型。

以下是 JLS §15.9 的摘录

如果类型参数紧跟在 new 之后,或者立即存在 在 (,则如果有任何类型参数,则为编译时错误 是通配符

一种解决方法是参数化类并将该类型变量传递给Iterable接口实现。

interface CustomInterface<T extends MyBaseType> extends Iterable<T>{
} 

最新更新