gpt4 book ai didi

java - 类型不匹配 : cannot convert from Class <. .> 到类 <...>

转载 作者:行者123 更新时间:2023-11-29 08:05:44 25 4
gpt4 key购买 nike

我“继承”了一个 Eclipse RCP 项目,它似乎可以很好地与基于 3.6 的目标平台集一起工作。但是,向前推进我们需要更新到最新版本的平台,但是当我将目标平台更改为 3.7(或 4.2)时,我收到了一些类似

的错误
Type mismatch: cannot convert from Class<capture#1-of ?> to Class<? extends IDatasetProvider>

谁能建议/解释为什么这在 3.6 中可以正常工作,但在 3.7(及更高版本)中却不能?关于我将从哪里开始解决这个问题的任何想法也很棒!

导致此错误的代码片段(出现在 b.loadClass 部分):

    List<Class<? extends IDatasetProvider>> list = new LinkedList<Class<? extends IDatasetProvider>>();
ClassMap<IDatasetProvider, List<String>> map = new ClassMap<IDatasetProvider, List<String>>();

for (IConfigurationElement e : elements)
{
try
{
Bundle b = Platform.getBundle(e.getContributor().getName());

String viewId = e.getAttribute("viewId");
Class<? extends IDatasetProvider> datasetType = b.loadClass(e
.getAttribute("datasetProvider"));
...
...
...
}
}

还有 3 个(可能)相关的警告

 IDatasetProvider is a raw type. References to generic type IDatasetProvider<T> should be parameterized 

如果我改回我们的 3.6 平台,它又能正常工作了。

编辑:在 Alexy 和 gzukmin 的帮助下修复。

我使用了以下代码,特别是转换为 Class<? extends IDatasetProvider>而不仅仅是 Class :

Class<? extends IDatasetProvider> datasetType = 
(Class<? extends IDatasetProvider>) b.loadClass(e.getAttribute("datasetProvider"));

如果有任何理由我应该考虑转换为更通用的 Class ,请告诉我!

最佳答案

您可以像这样将其转换为原始类型:

Class<? extends IDatasetProvider> datasetType = 
(Class) b.loadClass(e.getAttribute("datasetProvider"));

注意这将:

  1. 添加更多关于原始类型和未经检查的转换的警告。

  2. 如果您的类实际上没有扩展 IDatasetProvider,那么在运行时就会崩溃。而不是在施放位置,而是稍后当您尝试实际使用该类时。所以用

    检查一下可能是个好主意
    IDatasetProvider.class.isAssignableFrom(datasetType)

(参见 Javadoc)。

关于java - 类型不匹配 : cannot convert from Class <. .> 到类 <...>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11363788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com