java génériques erreur de compilation
J'ai le générique suivante à la classe:
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()
{
}
}
Et c'est de cette façon que j'ai simplement l'utiliser:
GenericClass<MyClass, Double> set = GenericClass.create();
Eclipse compilation montre pas d'erreurs, cependant avec ant donne l'erreur suivante:
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();
Merci!
Et SortedSetByDoubleValue est...?
Fixe... j'ai changé les noms de classe pour des raisons de simplicité
Ma suggestion est de ne pas utiliser les mêmes noms pour les types génériques dans la méthode statique de créer et de la classe. Bien que techniquement, il est légal, il peut conduire à quelques fous des erreurs difficiles à repérer. Je suggère fortement de remplacer E,T, E2 et T2 (ou autre) dans l'ensemble de la créer() définition.
pour de meilleurs résultats avec des sous-classes, la limite devrait être
Fixe... j'ai changé les noms de classe pour des raisons de simplicité
Ma suggestion est de ne pas utiliser les mêmes noms pour les types génériques dans la méthode statique de créer et de la classe. Bien que techniquement, il est légal, il peut conduire à quelques fous des erreurs difficiles à repérer. Je suggère fortement de remplacer E,T, E2 et T2 (ou autre) dans l'ensemble de la créer() définition.
pour de meilleurs résultats avec des sous-classes, la limite devrait être
T extends Comparable<? super T>
OriginalL'auteur duduamar | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser ceci:
L'Éclipse et d'un compilateur javac diffèrent dans leur tolérance.
est moins complexe: il n'a pas de restriction sur les deux arguments de type.
Cool... appris quelque chose de nouveau. Merci à tous
OriginalL'auteur Grzegorz Oledzki
Votre expression
GenericClass.create()
porte pas d'indication de type, de sorte que le compilateur ne peut pas en déduire le type réel de l'E et T. Vous avez besoin de modifier le prototype de la fonction à l'aide du compilateur.La façon la plus simple est de passer les classes.
Exemple:
javac
n'était pas en mesure d'en déduire les types et l'éclipse du compilateur a pu. Chaque fois que j'ai déposé bugs (à la fois avec Eclipse et Sun/Oracle) il s'est avéré êtrejavac
qui était en faute.Oui... mais javac est la référence 😉 de toute façon, j'ai appris quelque chose de nouveau grâce à Grzegorz.
OriginalL'auteur cadrian