我正在编写一个通用的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));
处理这种情况的最佳方法是什么,谢谢
答案 0 :(得分:4)
从
更改您的功能public GenericDisplayAdapter(Activity activity, ArrayList<Object> arrData)
到
public GenericDisplayAdapter(Activity activity, ArrayList<?> arrData)
然后,您就可以为ArrayList<T>
传递T
。 ArrayList<?>
几乎与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)
你应该像
一样通用ArrayListpublic GenericDisplayAdapter(Activity activity, ArrayList<?> arrData) {
this.m_ArrData = arrData;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}