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

@SuppressWarnings("unchecked") not working with drag and drop

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

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")”,我还是收到了一个错误:

The type List is not generic; it cannot be parameterized with arguments < File>

谁能告诉我这里出了什么问题?看起来很简单。 谢谢

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

抑制 "unchecked" 警告仅适用于经历未经检查的操作(如泛型转换)的泛型类型。它不会抑制像将泛型参数放在非泛型类型上这样的彻底错误。您将泛型参数添加到非泛型类型 List。这是一个无法抑制的错误。