2012-04-10 79 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); 
} 
相关问题