@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<File>
。
【讨论】:
效果很好!我本可以节省最后 3 个小时。谢谢!【参考方案2】:抑制“未检查”警告仅适用于经过未检查操作(如泛型强制转换)的泛型类型。它不会抑制彻底的错误,例如将泛型参数放在非泛型类型上。您向非泛型类型List
添加了泛型参数。这是一个无法抑制的错误。
【讨论】:
以上是关于@SuppressWarnings("unchecked") 不适用于拖放的主要内容,如果未能解决你的问题,请参考以下文章
@SuppressWarnings("")在Java中是什么意思(转)
在 java 中使用“@SuppressWarnings("unchecked")”有啥好处?
@SuppressWarnings("deprecation")
@SuppressWarnings("serial")有啥作用?