私はEclipseRCPプロジェクトを「継承」しました。これは、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
、私に知らせてください!