2012-04-10 76 views
2

我正在編寫一個通用的java-android函數,它將接受一個參數ArrayList<Object>,以便我可以使用所有的應用程序不管ArrayList元素的類型如何。將一個ArrayList <CustomObject>傳遞給一個函數,該函數接受參數ArrayList <Object> in Java

這是我的函數:

public GenericDisplayAdapter(Activity activity, ArrayList<Object> arrData) { 

    this.m_ArrData = arrData; 
    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

當我試圖通過我的ArrayList<CustomObject>作爲參數傳遞給這個函數,我得到錯誤「無法從ArrayList<CustomObject>轉換爲ArrayList<Object>」,

 m_LVStructDamageHeader.setAdapter(new GenericDisplayAdapter(
      (Activity)this, (ArrayList<Object>)arrStructDamageHeaders)); 

什麼是處理這種情況,最好的辦法,謝謝

回答

4

更改功能
public GenericDisplayAdapter(Activity activity, ArrayList<Object> arrData) 

to

public GenericDisplayAdapter(Activity activity, ArrayList<?> arrData) 

然後,您將能夠通過ArrayList<T>任何TArrayList<?>幾乎是像ArrayList<Object>,但不同的是,你可以添加任何對象進入ArrayList<Object>(如果你通過例如ArrayList<CustomObject>存在,這是非常壞的),你可以不加任何東西到ArrayList<?>(這是罰款)。

+0

「不能添加任何東西......」除了'null' – newacct 2012-04-10 08:21:17

+0

@newacct:真正的:-) – 2012-04-10 08:32:49

1

想想也是,它可能是適當給予基因ricDisplayAdapter類是一個類型參數。例如。

class GenericDisplayAdapter<T> { 
    private List<T> m_ArrData; 

    public GenericDisplayAdapter(Activity activity, ArrayList<T> arrData) { 
     ... 
    } 
} 

所以後來其他方法可利用這一類型參數的優勢,而不是買賣對象,他們可以使用T.

2

變化的方法參數

ArrayList<Object> to ArrayList<? extends Object> 
+0

由於它的工作,但我preferr彼得的解決方案 – 2012-04-10 07:36:44

1

則應在通用的ArrayList就像

public GenericDisplayAdapter(Activity activity, ArrayList<?> arrData) { 

    this.m_ArrData = arrData; 
    inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
相關問題