解释我的问题:
我有一个名为First的超级抽象类,然后我有很多继承自它的类。 我想建立一种方法,我说" to it"创建一个继承自First class"的类型的ArrayList,但我无法找到解决方案。 例如:
public abstract class First{
public First(){
}
}
public class FirstOne extends First{
...........
}
//It's a pseudo-code
public class MyProgramClass{
public creatingMethod(TypeThatInheritFromFirstClass x ){
return ArrayList<TypeThatInheritFromFirstClass>;
}
}
我在程序类中插入了creationMethod,但它可以在任何地方(我喜欢在First类中使用静态方法,但它是一个例子)
感谢您的时间
答案 0 :(得分:0)
您可以使用type token:
public class SomeGenerics {
public static void main(String[] args) {
List<SubFirst1> list1 = creatingMethod(SubFirst1.class);
List<SubFirst2> list2 = creatingMethod(SubFirst2.class);
}
public static <T extends First> List<T> creatingMethod(Class<T> type) {
return new ArrayList<>();
}
}
class First {}
class SubFirst1 extends First {}
class SubFirst2 extends First {}
根据评论编辑:
由于您已经拥有类型令牌,因此您可以使用它来创建该类型的实例。一点限制是,您必须知道要使用的构造函数。如果它们 - 例如 - 都具有无参数构造函数,则可以创建类似的实例:
public static <T extends First> List<T> creatingMethod(Class<T> type) throws ReflectiveOperationException {
List<T> result = new ArrayList<>();
result.add(type.newInstance());
return result;
}
如果你有一个带参数的构造函数(同样:所有子类必须具有相同的参数化构造函数),你必须采用更加困难的方式。带字符串参数的示例:
public static <T extends First> List<T> creatingMethod(Class<T> type, String param) throws ReflectiveOperationException {
List<T> result = new ArrayList<>();
Constructor<T> constructor = type.getDeclaredConstructor(String.class);
result.add(constructor.newInstance(param));
return result;
}