[英]Is this raw type assignment type-safe? List<T> = new ArrayList();
[英]What is the best way to convert a raw vector to type safe list(Arraylist)
我有一個返回原始向量的函數。 我知道向量中的所有元素都是字符串,但是由於遺留原因,代碼仍然保留。 我想從此數據獲取一個arraylist。
一種幼稚的方法是迭代向量並將元素添加到列表中。 是否有任何簡短的方法可以防止循環。 或者可以是啟用此功能的直接功能。
編輯:
例:
Vector f1() {} //f1 returns raw vector
我要實現以下目標:
List<String> l = new ArrayList<String>();
Vector vec = f1();
for(Object obj: vec) {
l.add((String) obj);
}
注意:我沒有檢查上面的代碼是否編譯。 請把它當作偽代碼
如果你100%確定Vector只包含字符串,最簡單的方法是:
List<String> list = new ArrayList<>(vector);
請注意,即使Vector包含其他類型的對象,這也將編譯並運行正常。 但是,這:
list.get(i);
如果第i個元素不是String,則拋出ClassCastException
。
由於您有原始的Vector,因此您會收到警告。 如果要擺脫它們,可以使用:
@SuppressWarnings(value = {"unchecked", "rawtypes"})
public static List<String> rawVectorToList(Vector v) {
return new ArrayList<>(v);
}
快速檢測轉換問題的另一種方法是手動復制數組(復制構造函數在引擎蓋下執行的操作):
Vector v = ...;
String[] elements = Arrays.copyOf(v.toArray(), v.size(), String[].class);
List<String> list = Arrays.asList(elements);
或者如果您需要列表是可變的:
List<String> list = new ArrayList<> (Arrays.asList(elements));
這樣的好處是可以在復制時檢查類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.