在创建类型集合时如何强制类型安全,其中每个类型必须属于同一个父类?

use*_*422 1 java collections types subclass type-safety

问题总结

我想存储一个对象类型列表,但规定所有类型都是特定父类的子类。例如,类似于以下内容:

public abstract class ParentClass {
    ...

}

public class ChildClass1 extends ParentClass {
    ...

}

public class ChildClass2 extends ParentClass {
    ...

}

public class SomeOtherClass {
    List<Type> listOfChildClassTypes = new ArrayList<>();

    public void someMethod() {
        listOfChildClassTypes.add(ChildClass1.class);
        listOfChildClassTypes.add(ChildClass2.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我想定义 listOfChildClassTypes 列表,以便只能向其中添加 ParentClass 的子类型 - 任何尝试添加不是 ParentClass 子类的类型都应该导致编译器错误。通过使用通用的“Type”类,上面的代码允许将任何类型存储在需要运行时验证来检查的列表中。这是我想避免的。

谢谢你的帮助。

Eug*_*ene 6

您应该阅读什么PECS是“有界类型”以及什么是“有界类型”,因为这正是您在这里所需要的:

List<Class<? extends ParentClass>> listOfChildClassTypes = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)