java generics-Kompilierungsfehler
Habe ich die folgende generische Klasse:
public class GenericClass<E,T extends Comparable<T>>
{
public static <E, T extends Comparable<T>> GenericClass<E, T> create()
{
return new GenericClass<E, T>();
}
private GenericClass()
{
}
}
Und dies ist, wie ich es einfach:
GenericClass<MyClass, Double> set = GenericClass.create();
Eclipse Zusammenstellung zeigt keine Fehler, allerdings - Gebäude mit ant bietet die folgende Fehlermeldung:
MyClass.java:19: incompatible types; no instance(s) of type variable(s) E,T exist so that GenericClass<E,T> conforms to GenericClass<MyClass,java.lang.Double>
[javac] found : <E,T>GenericClass<E,T>
[javac] required: GenericClass<MyClass,java.lang.Double>
[javac] GenericClass<MyClass, Double> set = GenericClass.create();
Dank!
Und SortedSetByDoubleValue ist...?
Fixed... ich habe mich verändert die Namen der Klassen für Einfachheit
Mein Vorschlag ist, nicht die gleichen Namen für generische Typen in die statische Methode erstellen, und die Klasse. Obwohl es technisch legal sind, könnte es dazu führen, dass einige verrückte Fehler schwer zu erkennen. Ich würde stark vorschlagen, ersetzen von-E,T mit E2 und T2 (oder was auch immer) in der ganzen create() definition.
für die besten Ergebnisse mit Unterklassen, die gebunden werden sollen
Fixed... ich habe mich verändert die Namen der Klassen für Einfachheit
Mein Vorschlag ist, nicht die gleichen Namen für generische Typen in die statische Methode erstellen, und die Klasse. Obwohl es technisch legal sind, könnte es dazu führen, dass einige verrückte Fehler schwer zu erkennen. Ich würde stark vorschlagen, ersetzen von-E,T mit E2 und T2 (oder was auch immer) in der ganzen create() definition.
für die besten Ergebnisse mit Unterklassen, die gebunden werden sollen
T extends Comparable<? super T>
InformationsquelleAutor duduamar | 2011-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit dieser:
Den Eclipse-compiler und javac unterscheiden sich in Ihrer Toleranz.
ist weniger Komplex: es hat keine Einschränkung auf die Art zwei Argumente.
Cool... etwas neues gelernt. Vielen Dank an alle
InformationsquelleAutor Grzegorz Oledzki
Ihren Ausdruck
GenericClass.create()
trägt keinen Hinweis darauf geben, damit der compiler keine Rückschlüsse auf die Reale Art von E und T. Sie müssen ändern Sie den Prototyp Ihrer Funktion zu helfen, den compiler.Der einfachste Weg ist die übergabe der Klassen.
Beispiel:
javac
war nicht in der Lage zu schließen, die Arten und die eclipse-compiler in der Lage war. Jedes mal habe ich eingereicht bugs für die es (sowohl mit Eclipse und Sun/Oracle), es stellte sich heraus, dassjavac
war Schuld.Ja... aber javac ist die Referenz 😉 Jedenfalls habe ich etwas neues gelernt Dank Grzegorz.
InformationsquelleAutor cadrian