2010-03-23 78 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

相关问题