Type mismatch: cannot convert von Klasse <..> Klasse <...>

Habe ich 'geerbt' ein Eclipse-RCP-Projekt, das scheint gut zu funktionieren mit einer Ziel-Plattform basiert auf 3.6. Aber vorwärts müssen wir ein update auf die neueste version der Plattform, aber wenn ich ändern Sie die target-Plattform auf 3,7 (oder 4.2), habe ich eine Handvoll von Fehlern, die entlang der Linien von

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

Kann jeder jeden schlagen/eine Erklärung, warum das so gut funktioniert in 3.6, nicht aber in 3.7 (und später)? Irgendwelche Ideen, wo ich anfangen würde bei der Lösung dieses wäre auch toll!

Einen Ausschnitt aus dem code, der diesen Fehler verursacht (erscheint am.b.loadClass Teil):

    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"));
            ...
            ...
            ...
        }
     }

Gibt es auch 3 (möglicherweise) verbundene Warnungen

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

Wenn ich zurück zu unserer 3.6-Plattform, es funktioniert alles wieder.

EDIT: behoben Dank der Hilfe von Alexy und gzukmin.

Ich verwendete den folgenden code, speziell casting zu Class<? extends IDatasetProvider> anstatt nur Class:

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

Wenn es aus irgendeinem Grund sollte ich sollten Sie nur Gießen, um die generische Class, lassen Sie es mich bitte wissen!

Ich gehe davon aus, dass es nützliche, um zu sehen loadClass Signatur der Methode.
Meinst du den: Class<?> loadClass(String name) throws ClassNotFoundException; Linie von der org.osgi.Rahmen.Bundle-Klasse?
Verwenden Sie die gleiche Java-version unter 3.6, 3.7 und 4.2?
Genau. Also, versuchen Sie weisen eine Class<?> Objekt der Class<? extends IDatasetProvider> variable, die produzieren Fehler (nehme ich an). Dies ist, weil Class<?> ist kein Subtyp von Class<? extends IDatasetProvider>. Mai werden in der vorherigen version Class<?> war ein rawtype Class und statt Fehler-compiler erzeugt Warnungen, die ignoriert wurden.
Es ist JDK 1.6 / JRE6 für alle Versionen von eclipse.

InformationsquelleAutor Jonny | 2012-07-06

Schreibe einen Kommentar