Java 创建类型集合时,如果每个类型必须属于同一父类,如何强制执行类型安全性?

Java 创建类型集合时,如果每个类型必须属于同一父类,如何强制执行类型安全性?,java,types,collections,subclass,type-safety,Java,Types,Collections,Subclass,Type Safety,问题摘要 我想存储一个对象类型列表,但规定所有类型都是特定父类的子类。例如,如下所示: public abstract class ParentClass { ... } public class ChildClass1 extends ParentClass { ... } public class ChildClass2 extends ParentClass { ... } public class SomeOtherClass { List&l

问题摘要


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

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);
    }
}
公共抽象类父类{
...
}
公共类ChildClass1扩展了ParentClass{
...
}
公共类ChildClass2扩展了父类{
...
}
公共类其他类{
List listOfChildClassTypes=new ArrayList();
公共方法(){
添加(ChildClass1.class);
添加(ChildClass2.class)的ChildClassTypes.add列表;
}
}
问题是,我想定义listOfChildClassTypes列表,以便只向其中添加ParentClass的子类型-任何添加不是ParentClass子类的类型的尝试都会导致编译器错误。通过使用泛型“Type”类,上面的代码允许在列表中存储任何需要运行时验证才能检查的类型。这是我想要避免的


感谢您的帮助。

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

List<Class<? extends ParentClass>> listOfChildClassTypes = new ArrayList<>();

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

List<Class<? extends ParentClass>> listOfChildClassTypes = new ArrayList<>();

List“我想存储一个对象类型列表,但规定所有类型都是特定父类的子类。”“通过使用泛型'Type'关键字…”-Java中没有这样的关键字。--
List listOfChildClassTypes=new ArrayList()您很可能误解了代码。最可能使用的是类,它不是关键字。这在
类型中是不可能的。但是,可以使用
Class
List“我想存储对象类型的列表,但规定所有类型都是特定父类的子类。”“通过使用泛型'Type'关键字…”-Java中没有这样的关键字。--
List listOfChildClassTypes=new ArrayList()您很可能误解了代码。最可能使用的是类,它不是关键字。这在
类型中是不可能的。然而,使用
是可能的:
列表使用
类型
,而不是
@Turing85对,但使用
类型
是不可能的。我可以在使用类型时向列表中添加任何类型,但这不是我想要的wanted@user3855422
类型
很少需要,尽管有时非常有用。你的案子也不例外,图灵85和尤金。是的,我只是想说清楚-我不想使用类型。我在寻找更好的方法。很高兴看到这个解决方案,多亏了你们两位。OP使用
类型
,而不是
@Turing85对,但是
类型
不可能。我可以在使用类型时向列表中添加任何类型,但这不是我想要的wanted@user3855422
类型
很少需要,尽管有时非常有用。你的案子也不例外,图灵85和尤金。是的,我只是想说清楚-我不想使用类型。我在寻找更好的方法。对解决方案感到满意,感谢你们两位。