如何将ArrayList <object>转换为ArrayList <different object =“”> </different> </object>

时间:2014-05-02 02:50:37

标签: java android object arraylist

我为ArrayList&lt;&#34; Object&#34;&gt;

添加了一些值
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;
}

2 个答案:

答案 0 :(得分:0)

查看java泛型。传入数组列表时,请将其定义为ArrayList<T extends Object>ArrayList<? extends Object>。然后,当您传递或获取值时,您可以将T定义为您选择的类,或者检查该对象是否是您想要的类的实例。有关java泛型的大量信息和示例,因此您可以找到符合您需求的内容,而无需发布大量示例。

我认为不能自动将ArrayList<Object>分配给ArrayList<AdListData>,因为无法保证所有数据都属于AdListData类型。

答案 1 :(得分:0)

为什么你的生活过于复杂..

听说过Moduler CodeInterfacesAbstract class es ???

我建议你在InterfaceAbstract class上写一个AdListDataAnotherClass ..(我假设他们分享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);
    }
}