我有一个这样的方法-
public List<Apples> returnFruits(String arg1){
List<Apples> fruits = new ArrayList<Apples>();
Apple a = new Apple();
fruits.add(a);
return fruits;
}
我想更改它,以便我可以从方法调用中指定水果类型并返回该水果列表。所以第二条语句应该动态实例化我传递的水果列表。我想到了这个-
public List<?> returnFruits(String arg1){
List<T> fruits = new ArrayList<T>();
T t = new T();
fruits.add(t);
return fruits;
}
但不知道正确的方法,如您所见。
在第二种方法中,我只返回水果而不是列表-
public T returnFruit(){
T t = new T();
return t;
}
传递的水果不在同一个类层次结构中,并且是不同的类型。
谢谢。
最佳答案
如果你确定你会有一个无参数构造函数,你可以使用这个语法:
public <T> List<T> returnFruits(Class<T> clazz){
List<T> fruits = new ArrayList<T>();
T t = clazz.newInstance();
fruits.add(t);
return fruits;
}
用法:
List<MyClass> m = returnFruits(MyClass.class, "plop");
如果你知道你有一个带字符串参数的构造函数:
public <T> List<T> returnFruits(Class<T> clazz, String arg1){
List<T> fruits = new ArrayList<T>();
Constructor<T> constructor = clazz.getConstructor(String.class);
T t = constructor.newInstance(arg1);
fruits.add(t);
return fruits;
}
用法:
List<MyClass> m = returnFruits(MyClass.class, "plop");
等等
关于Java-使用泛型返回多个类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433104/