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和尤金。是的,我只是想说清楚-我不想使用类型。我在寻找更好的方法。对解决方案感到满意,感谢你们两位。