2016-09-14 47 views
1

私はいくつかのアクションのために許可されたキーを定義するためにsetを使用しています。 Eclipseのこの警告を示しています型の安全性:List型の式では、Collection <?に適合するように未確認の変換が必要です。 extends Object>

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


私は少しググと若干異なる場合も同じメッセージが、そのおそらく同様の問題を発見しました。
万が一この警告他の方法を取り除く、その後

@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

なぜ 'Set 'と 'HashSet 'を使用しないのですか? – Eran

+0

@エランそれは本当にどんなタイプでもないと思う。私はそれを呼び出します allowedKeys.contains(key)。 それとの間に有用な違いがありますか? ところで、あなたが尋ねたように書くと、警告メッセージが表示される状況は変わりません。 – user1097772

+0

あなたのエラーは_exactly_のどの表現ですか? 'List'の生の型から' Collection 'に変換する場所は表示されていません。 –

答えて

1

Eclipseは混乱をした:
間違っ:

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

正しい:

import jave.util.Arrays; 


ように、コードは両方のバージョンSet<?>Set<String> okです。 Eclipseは自動的に不正なクラスをインポートしました。

3

Set<?>またはSet<Object>あなたはそれが既存のコードで動作しなければならない場合にのみを使用する必要があります。それ以外の場合は、代わりに特定のタイプを作成しようとします。

セットにString要素しか含まれていない場合は、Set<String>が最適です。

+0

+1 Set とSet については、既存のコードで動作させるようにしていますが、常にStringsになりますので、私は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; 
    } 
} 

これらは、これらの式タイプのチェック警告に感謝します。ありがとうございます。

関連する問題