我正在尝试使用泛型来创建一个可以是T类型的对象,这可能吗?
public class SoapObjectToModel <T> {
public ArrayList<T> convert(SoapObject soapObject) {
ArrayList<T> result = new ArrayList<T>();
// Somehow initialize an object of type T
}
}
答案 0 :(得分:4)
您无法创建T
类型的对象。
永远记住你可以永远拥有SoapObjectToModel<MyAbstractClass>
,如果你尝试创建T
会怎样?它会创建一个抽象类吗?
作为一种变通方法,您可能希望将T
类型的元素作为参数传递,并使用reflection创建新对象,或者甚至更好 - 查看{{3 }}
答案 1 :(得分:1)
使用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;
}
}