2012-02-26 34 views
0

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

     } 
} 
+1

有多少次被問過? – 2012-02-26 13:07:04

回答

4

您不能創建類型爲T的對象。

永遠記住,你總是可以有SoapObjectToModel<MyAbstractClass>,如果你嘗試創建T會發生什麼?它會創建一個抽象類嗎?

作爲一種變通方法,您可能希望T類型的元素作爲參數傳遞,並且使用reflection創建一個新的對象,甚至更好 - 看看在Factory Design Pattern

+0

下載者是否會關注評論? – amit 2012-02-26 10:32:53

+0

你可以用java反射來做到這一點。在你的例子中,它會拋出一個異常,但通常它是可能的 – Tim 2012-02-26 10:33:36

+0

@Tim:你怎麼能做到這一點,沒有'T'的簡潔對象,你將需要一個實例 - 然後你可以做到 - 因爲我提到,還是使用工廠模式 – amit 2012-02-26 10:37:05

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; 
    } 
}