2010-03-23 74 views
5

我試圖清理一些舊的Java代碼(在Eclipse中)的一些警告,並且我不確定在這種情況下做什麼是正確的。塊看起來或多或少是這樣的:解決Eclipse警告「沒有參數化」的正確方法是什麼?

Transferable content = getToolkit().getSystemClipboard().getContents(null); 
java.util.List clipboardFileList = null; 

if(content.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 
    try { 
    clipboardFileList = (java.util.List)content.getTransferData(
     DataFlavor.javaFileListFlavor); 
    } 
    /* Do other crap, etc. */ 
} 

列表生成一個警告,因爲它是沒有參數,但是,如果我<File>參數吧,我敢肯定是個什麼需要,它抱怨它不能從Object轉換爲List<File>。我只能抑制該函數的未檢查警告,但如果存在「良好」解決方案,則寧願避免這種情況。思考?

+0

所以getTransferData()返回一個Object? – 2010-03-23 17:54:02

+0

哎呀,忽略了內容是什麼內容。 – Morinar 2010-03-23 17:58:03

回答

6

我會建議明確地將結果轉換爲List<File>並抑制警告。根據the documentation

public static final DataFlavor javaFileListFlavor

要文件的列表從Java(和底層平臺)這種類型/子類型和表示類的java.util.List的的DataFlavor用於傳送到/。該列表中的每個元素都必須/保證爲java.io.File

在這種情況下,文件中的數據類型,隨意忽略警告,明確規定按照約書亞布洛赫的Effective Java(第116頁)的項目24:

如果你不能消除警告,並且您可以證明引發警告的代碼是類型安全的,然後(並且只在此時)用註釋來壓制警告。

+0

這對我來說是有意義的,也是我傾向於的方向。只是好奇,如果有一個「更好」的解決方案。 – Morinar 2010-03-23 18:19:41

+0

@Morinar:可以理解。答案的目的是提供一個專家(約書亞布洛赫)的理由背後的決定。 :) – 2010-03-23 18:24:45

4

試試這個

java.util.List<?> 
+0

這似乎在伎倆。那只是告訴它,我不知道這是什麼類型?還是比這更復雜? – Morinar 2010-03-23 17:55:59

+2

@Morinar,它做的更多一點:它說列表是一個特定的類型,這是未知的 - 而原始類型意味着它是一個列表,可以包含不同類型的元素(因此不是類型安全的)。 – 2010-03-23 18:06:59

0

我不認爲你需要使用<?>。這對我來說很好嗎?

Object obj = null; 
List<File> aa = (List<File>)obj; 
+0

對不起,我不清楚。這並不是說它無法做到,而是它是一個'從對象到列表'的未經檢查的轉換。 – Morinar 2010-03-23 18:01:11

+0

哦。對不起,我使用IDEA,並沒有給出任何警告。 – 2010-03-23 18:39:12

相關問題