我想用泛型来创建一个可以是T类型的对象,这可能吗?Java - 使用泛型生成随机对象?
public class SoapObjectToModel <T> {
public ArrayList<T> convert(SoapObject soapObject) {
ArrayList<T> result = new ArrayList<T>();
// Somehow initialize an object of type T
}
}
我想用泛型来创建一个可以是T类型的对象,这可能吗?Java - 使用泛型生成随机对象?
public class SoapObjectToModel <T> {
public ArrayList<T> convert(SoapObject soapObject) {
ArrayList<T> result = new ArrayList<T>();
// Somehow initialize an object of type T
}
}
您不能创建类型为T
的对象。
永远记住,你总是可以有SoapObjectToModel<MyAbstractClass>
,如果你尝试创建T
会发生什么?它会创建一个抽象类吗?
作为一种变通方法,您可能希望T
类型的元素作为参数传递,并且使用reflection创建一个新的对象,甚至更好 - 看看在Factory Design Pattern
使用工厂模式为由amit建议是解决这个问题的一个很好的解决方案,它也是保证工作的通用解决方案。但是,在某些情况下,建议使用反射的替代方法可能更容易。这是在您的特定情况下如何使用反射的实际示例:
class SoapObjectToModel<T> {
private Class<T> type;
public SoapObjectToModel(Class<T> type) {
this.type = type;
}
public ArrayList<T> convert(SoapObject soapObject) {
try {
ArrayList<T> result = new ArrayList<T>();
result.add(type.newInstance());
return result;
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
有多少次被问过? – 2012-02-26 13:07:04