我想用泛型來創建一個可以是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