我为ArrayList<" Object">
添加了一些值ArrayList<Object> mData = new ArrayList<Object>();
AdListData data = new AdListData();
data.Id = json_data.getInt("ad_uid");
data.User_id = json_data.getInt("user_id");
mData.add(data);
在我需要转换ArrayList&lt;&#34; Object&#34;&gt;之后到ArrayList&lt;&#34; AdListData&#34;&gt; 我怎样才能做到这一点?例如:
ArrayList<AdListData> array = new ArrayList<AdListData>();
array = mData;
为什么我需要这样做?我使用AsyncTask并在onPostExecute上获取这样的数据
protected void onPostExecute(ArrayList<Object> result) {
// Pass the result data back to the main activity
mDownloadCompleteListener.getDownloadCompleteState(result);
}
此示例显示仅获取类型的arraylist
ArrayList<Object>
OR
ArrayList<AdListData>
但在我的情况下,我想将它用于不同的对象,如此
ArrayList<Object> mData = new ArrayList<Object>();
if(mType == "get_ad_data")
{
AdListData data = new AdListData();
data.Id = json_data.getInt("ad_uid");
data.User_id = json_data.getInt("user_id");
mData.add(data);
}
else
{
AnotherClass data = new AnotherClass();
data.Id = json_data.getInt("ad_uid");
data.User_id = json_data.getInt("user_id");
mData.add(data);
}
return mData;
` 当监听器调用时,我希望将其转换为所需的对象数组
@Override
public void getDownloadCompleteState(ArrayList<Object> ad_list) {
// TODO Auto-generated method stub
ArrayList<AdListData> array = new ArrayList<AdListData>();
array = ad_list;
}
答案 0 :(得分:0)
查看java泛型。传入数组列表时,请将其定义为ArrayList<T extends Object>
或ArrayList<? extends Object>
。然后,当您传递或获取值时,您可以将T定义为您选择的类,或者检查该对象是否是您想要的类的实例。有关java泛型的大量信息和示例,因此您可以找到符合您需求的内容,而无需发布大量示例。
我认为不能自动将ArrayList<Object>
分配给ArrayList<AdListData>
,因为无法保证所有数据都属于AdListData
类型。
答案 1 :(得分:0)
为什么你的生活过于复杂..
听说过Moduler Code
,Interfaces
,Abstract class
es ???
我建议你在Interface
和Abstract class
上写一个AdListData
或AnotherClass
..(我假设他们分享IS A
关系。 )如果没有..为那些写两个差异AsyncTask
..如果它们共享公共代码,你可以使用像效用函数这样的函数。
这样做你的代码将更加可读和简单..
现在,为了解答你的问题,我只会写一些片段..
public class Test {
int data;
public static <T extends Object> void foo(ArrayList<T> l) {
T firstObj = l.get(0);
if (firstObj != null) {
if (firstObj instanceof Test) {
System.out.println("yay.. I am list of test obj " + l);
} else {
System.out.println("m just another list.. :( " + l);
}
}
@Override
public String toString() {
return data + "";
}
public static void main(String[] args) {
ArrayList<Test> l = new ArrayList<Test>();
Test t1 = new Test();
t1.data = 1;
Test t2 = new Test();
t2.data = 2;
Test t3 = new Test();
t3.data = 3;
Test t4 = new Test();
t4.data = 4;
l.add(t1);
l.add(t2);
l.add(t3);
l.add(t4);
foo(l);
ArrayList<Integer> l2 = new ArrayList<Integer>();
l2.add(1);
l2.add(2);
l2.add(3);
l2.add(4);
foo(l2);
}
}