@SuppressWarnings("unchecked") 不适用于拖放

Posted

技术标签:

【中文标题】@SuppressWarnings("unchecked") 不适用于拖放【英文标题】:@SuppressWarnings("unchecked") not working with drag and drop 【发布时间】:2017-10-04 05:20:44 【问题描述】:

我正在使用我找到的以下代码(来自 ABika 的How can I use Drag-and-Drop in Swing to get file path?)进行拖放:

final class FileDropHandler extends TransferHandler 
    @Override
    public boolean canImport(TransferHandler.TransferSupport support) 
        for (DataFlavor flavor : support.getDataFlavors()) 
            if (flavor.isFlavorJavaFileListType()) 
                return true;
            
        
        return false;
    

    @Override
    @SuppressWarnings("unchecked")
    public boolean importData(TransferHandler.TransferSupport support) 
        if (!this.canImport(support))
            return false;

        List<File> files;
        try 
            files = (List<File>) support.getTransferable()
                    .getTransferData(DataFlavor.javaFileListFlavor);
         catch (UnsupportedFlavorException | IOException ex) 
            // should never happen (or JDK is buggy)
            return false;
        

        for (File file: files) 
            // do something...
        
        return true;
    

然后将处理程序添加到组件中。

但问题是,尽管有“@SuppressWarnings("unchecked")”,但我收到了一个错误:

List 类型不是泛型的;它不能用参数

参数化

谁能告诉我这里出了什么问题?这似乎很直接。 谢谢

【问题讨论】:

无法复制。也许您还有另一个名为 List 的类? 请添加您的导入。我假设您拥有的课程 List 不是来自 java.util 【参考方案1】:

在这种情况下,getTransferData 方法应该返回一个java.util.List,但您正在导入java.awt.List,或者作为单一类型的导入语句,即import java.awt.List;,或者作为按需导入语句,即@ 987654325@。如果您有前者,则需要将其更改为 java.util.List,如果您有后者,则需要从 java.awt 导入每个类作为单一类型导入,或者使用限定的 List 类型名称importData 方法,如 java.util.List&lt;File&gt;

【讨论】:

效果很好!我本可以节省最后 3 个小时。谢谢!【参考方案2】:

抑制“未检查​​”警告仅适用于经过未检查操作(如泛型强制转换)的泛型类型。它不会抑制彻底的错误,例如将泛型参数放在非泛型类型上。您向非泛型类型List 添加了泛型参数。这是一个无法抑制的错误。

【讨论】:

以上是关于@SuppressWarnings("unchecked") 不适用于拖放的主要内容,如果未能解决你的问题,请参考以下文章

@SuppressWarnings("")在Java中是什么意思(转)

在 java 中使用“@SuppressWarnings("unchecked")”有啥好处?

@SuppressWarnings("deprecation")

@SuppressWarnings("serial")有啥作用?

@SuppressWarnings("unchecked") 不适用于拖放

使用 @SuppressWarnings("unchecked") 时的性能注意事项