将ArrayList <customobject>传递给一个函数,该函数接受Java中的ArrayList <object>作为参数</object> </customobject>

时间:2012-04-10 07:01:40

标签: java android generics arraylist

我正在编写一个通用的java-android函数,它将接受ArrayList<Object>作为其中一个参数,这样无论ArrayList元素的类型如何,我都可以使用我的应用程序。

这是我的功能:

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 个答案:

答案 0 :(得分:4)

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

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

然后,您就可以为ArrayList<T>传递TArrayList<?>几乎与ArrayList<Object>相似,但不同之处在于,您可以将 ANY 对象添加到ArrayList<Object>中(如果您传递ArrayList<CustomObject>,则非常糟糕1}}那里,你不能在ArrayList<?>中添加任何内容(这很好)。

答案 1 :(得分:2)

更改方法参数

ArrayList<Object> to ArrayList<? extends Object>

答案 2 :(得分:1)

还要考虑,为GenericDisplayAdapter类提供类型参数可能是合适的。 E.g。

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

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

那么其他方法可以利用这个类型参数,而不是处理Object,它们可以使用T.

答案 3 :(得分:1)

你应该像

一样通用ArrayList
public GenericDisplayAdapter(Activity activity, ArrayList<?> arrData) {

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