2011-10-16 55 views
1

我有一個帶有業務對象(我們稱之爲SuperClass)的Android應用程序,它有幾個派生類(讓我們稱它們爲DerviedClassA,DerivedClassB等)。每個對象具有一個構造這需要具有多個行Cursor對象並分配基於當前行上相應的屬性在光標Android - 使用Java泛型返回派生類的ArrayList

public Class DerivedClassA 
{ 
    // properties 
    private int X; 
    // etc 

    public DerivedClassA(Cursor data) 
    { 
     X = data.getInt(data.getColumIndex(ColumnX)); 
     // etc 
    } 
} 

我然後有BO方法,返回派生類的ArrayList,象下面:

public static ArrayList<DerivedClassA> getDerivedClassAList(Cursor data) 
{ 
    ArrayList<DerivedClassA> list = new ArrayList<DerivedClassA>(); 

    for(int i=0;i<data.getCount();i++) 
    { 
     data.moveToPosition(i); 
     DerivedClassA wev = new DerivedClassA(data); 
     list.add(wev); 
    } 

    data.close(); 
    return list; 
} 

等了DerivedClassB,DerivedClassC等。爲了避免這種重複,我希望能夠有一個單一的方法,這在某種程度上發生在派生類的類型,調用的派生適當的構造函數類,並返回適當派生的ArrayList類。例如:

public static ArrayList<T extends SuperClass> getDerivedClassList(Cursor data) 
{ 
    ArrayList<T> list = new ArrayList<T>(); 

    for(int i=0;i<data.getCount();i++) 
    { 
     data.moveToPosition(i); 
     T wev = new T(data); 
     list.add(wev); 
    } 

    data.close(); 
    return list; 
} 

但是,我不確定它是否真的有可能,或者如何去做。任何指針將不勝感激。

回答

3

是的。

public static <T extends SuperClass> ArrayList<T extends SuperClass> getDerivedClassList(Cursor data) 
{ 
    ArrayList<T> list = new ArrayList<T>(); 

    for(int i=0;i<data.getCount();i++) 
    { 
     data.moveToPosition(i); 
     T wev = new T(data); 
     list.add(wev); 
    } 

    data.close(); 
    return list; 
} 

參見:

http://download.oracle.com/javase/tutorial/extra/generics/methods.html
http://download.oracle.com/javase/tutorial/java/generics/genmethods.html

+1

不太。上面應該是ArrayList 。您不指定邊界兩次。 – EJP

+0

這幾乎工作... Eclipse給我一個關於T wev = new T(data)行的錯誤...'不能實例化類型T' – Michael

+0

您必須首先在'SuperClass'上聲明構造函數。 –