2010-09-21 69 views
4

我想要一個事物列表,然後我想測試列表以查看項目是否存在:在一行上創建項目列表,然後查詢列表以查看項目是否存在,但未收到Java中未經檢查的轉換警告

這是我的示例代碼段:

String[] handToolArray = {"pliers", "screwdriver", "tape measure"}; 
    List<String> handToolList = new ArrayList<String>(Arrays.asList(handToolArray)); 

    if (handToolList.contains("pliers")){ 
     System.out.println("I have pliers"); 
    } else { 
     System.out.println("I don't have pliers"); 
    } 

在第二行中,Arrays.asList(handToolArray)生成:

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

問題: 有AB etter的方式來創建然後查詢列表,這是簡潔的,並不需要未經檢查的警告被壓制?

+0

強烈希望在一行上創建數組或列表。 – 2010-09-21 23:37:12

+2

我沒有得到任何警告代碼... – Thilo 2010-09-21 23:48:12

+6

你有一個'Arrays'類,那不是jdk5'java.util.Arrays'? – 2010-09-21 23:53:35

回答

5

您可以在不顯式構造數組的情況下進行操作(數組仍然可變參數使用)。

List<String> handToolList = Arrays.asList("pliers", "screwdriver", "tape measure"); 
+0

之前嘗試過,這是我得到的: 類型數組中的方法asList(Object [])不適用於參數(String,String,String) – 2010-09-21 23:42:40

+5

JDK安裝程序有問題。你不應該首先得到警告。 – Thilo 2010-09-21 23:47:09

+0

正如前面的回答指出的那樣,我正在拿起一個非JDK Arrays類。 URP! – 2010-09-22 00:01:12

0

首先,我沒有得到類型安全警告,你也不應該。你使用什麼Java編譯器?

Arrays.asList已經創建了一個ArrayList(由原始數組支持),所以如果你並不需要一個副本,你可以做

List<String> handToolList = Arrays.asList(handToolArray); 

還要注意的東西,如Apache Commons Lang中ArrayUtils具有以下功能:檢查是否直接數組中存在的元素:

if (ArrayUtils.exists(handToolArray , "pliers")) 
+0

是的,這是一段較短的代碼(但仍然會生成未經檢查的轉換警告。) – 2010-09-21 23:46:29

+2

正如前面的答案中所述,我有一個錯誤的導入,並且未經檢查的異常消失了,導入java.util.Arrays – 2010-09-22 00:10:07

0

注List接口定義了indexOf()方法,你可以用它來檢查,如果存在的東西:

List<String> list = Arrays.asList(handTools); 
if(list.indexOf("pliers!") != -1) { 
    System.out.println("We have pliers."); 
} 
else { 
    System.out.println("We do not have any pliers."); 
} 
+1

爲什麼他更喜歡那個contains()? – Thilo 2010-09-22 00:38:02

相關問題