2016-09-14 31 views
1

我使用集來定義某些操作的允許鍵。 Eclipse中顯示這樣的警告:類型安全:類型List的表達式需要未經檢查的轉換以符合Collection <?擴展對象>

Type safety: The expression of type List needs unchecked conversion 
to conform to Collection<? extends Object> 


我GOOGLE了一下,稍微不同的情況下,但它可能是類似的問題找到同樣的消息。
任何機會擺脫這種警告其他方式再

@SuppressWarnings("unchecked") 

好主意,在這種情況下使用

@SuppressWarnings("unchecked") 

這裏是我的代碼:

public static final String KEY_A = "A_VALUE"; 
    public static final String KEY_B = "B_VALUE"; 

    public static final Set<?> allowedKeys = new HashSet<Object>(Arrays.asList(new String[] {KEY_A, KEY_B})); 
+2

爲什麼不使用'設置'和'HashSet的'? – Eran

+0

@Eran我認爲它是什麼類型並不重要。我只呼籲它 allowedKeys.contains(關鍵)。 還是有什麼有用的區別呢?順便說一句,如果你像你問的那樣寫下來,警告信息的情況依然如此。 – user1097772

+0

您的錯誤與哪個表達式_exactly_有關?你沒有顯示任何你從原始類型'List'轉換爲'Collection '的地方。 –

回答

1

的Eclipse做的一塌糊塗:
錯誤:

import edu.emory.mathcs.backport.java.util.Arrays; 

正確:

import jave.util.Arrays; 


所以代碼是確定兩個版本Set<?>Set<String>。 Eclipse只是自動導入不好的類。

3

Set<?>Set<Object>只應在情況下使用你必須讓它與現有的代碼。否則,請嘗試製作特定類型。

如果您確定該集合僅包含String元素,則Set<String>是最佳選擇。

+0

+1對於Set 和Set 的說明,我正在使用現有的代碼,但我很確定它會始終是字符串,所以我正在設置 user1097772

0

嘗試使用源代碼來理解問題,擺脫類型未檢查轉換警告,

private static Vector<Vector<String>> tableVectorData; 
private static Vector<String> rowData = new Vector<String>(); 

添加元素 -

rowData.clear(); 
rowData.addElement((strings[0])[0][0]); 
rowData.addElement((strings[0])[1][0]); 
tableVectorData.addElement(rowData); 

檢索元素 -

model = (DefaultTableModel) table.getModel(); 
rowCount = tableVectorData.size(); 
int i = 0; 
while(i < rowCount) { 
    Vector<String> row = tableVectorData.get(i++);//here the type check warning will occur 
    model.setRowCount(model.getRowCount()+1); 
    System.out.println(row); 
    model.setValueAt(row.get(0), model.getRowCount()-1, 0); 
    model.setValueAt(row.get(1), model.getRowCount()-1, 1); 
} 

或使用Iterator<Vector<String>> -

Iterator<Vector<String>> rows = tableVectorData.iterator();//here the type check warning will occur 
boolean flag = false; 

checkValue: 
while(rows.hasNext()) { 
    Vector<String> vect = rows.next(); 
    if(vect.contains(value)) { 
     flag = true; 
     break checkValue; 
    } 
} 

希望這些將爲您提供一種方式來處理這些表達式類型檢查的警告,謝謝。

相關問題