簡體   English   中英

鑄造數組列表

[英]Casting arrayList

我想將對象的 arrayList 轉換為特定對象類的 arrayList。 你不能像你投射一個普通的 Object 那樣做嗎?

JsonParser jParse = CallApi.getUsers(session);
//This object contains users
ArrayList<Object> unknownObject = jParse.getList();
ArrayList<User> users = (ArrayList<User>)unknownObject;

這是我剛剛為類似任務創建的輔助方法。

public static <newType, oldType> ArrayList<newType> castArrayList(ArrayList<oldType> list){
    ArrayList<newType> newlyCastedArrayList = new ArrayList<newType>();
    for(oldType listObject : list){
        newlyCastedArrayList.add((newType)listObject);
    }
    return newlyCastedArrayList;
}

它可以像這樣使用

 ArrayList<DesiredObjectType> myArrayList = Util.castArrayList( arrayListOfAnotherType );

此代碼將始終編譯。 無論如何,所有泛型(即<...> )在編譯期間都會被刪除。

List<User> users = (List)list;

但這並非沒有風險 如果您確定您的列表只包含User對象,那么您是安全的。 但是,如果列表中有其他對象,則可能會導致代碼中其他地方出現ClassCastExceptions (例如,如果您使用for(User user : list)循環迭代列表。

如果您添加這樣的演員表,您的 IDE 可能會顯示警告。 您可以使用注釋隱藏這些警告(例如,將@SurpressWarnings("unchecked")放在您的方法上方,或在其正上方的行)。

@SuppressWarnings("unchecked")
List<User> users = (List)list;

你可以做一個這樣的功能。

public static <T> List<T> cast(List list) {
    return list;
}

然后像這樣使用它。

    ArrayList<Object> list = new ArrayList<>();
    List<User> users = cast(list);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM