[英]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.