windu.2b Posté(e) le 19 mars 2008 Partager Posté(e) le 19 mars 2008 Bonjour, Alors voilà : je code en Java 5 et j'aimerais utiliser les types paramétrés. J'ai donc créé une interface comme suit : public interface DatabaseStructure<T> { public String getPreparedValue( T t ); } Et je l'ai implémenté comme ceci : public final class IntegerStructure<T> implements DatabaseStructure<T> { // Constructeurs public String getPreparedValue( T t ) { // à coder } } Mais, ce que j'aimerais faire (pas sûr que ce soit faisable), c'est adapter le type de retour de l'implémentation concrète de getPreparedValue( T t ) afin que chaque concrète ait son type de retour (ici ce serait un Integer, mais j'ai aussi des classes qui renverront un String, une Date...). Le but est de ne pas avoir un type de retour en String (ce qui a l'avantage d'uniformiser pour toutes les classes concrètes), mais bel et bien un type propre à chaque classe concrète... Est-ce possible et si oui, comment ? Car j'ai bien tenté de faire ça : public Integer getPreparedValue( T t ) { // à coder } Mais ça merde à la compilation ! Le message d'erreur est : Le type de retour n'est pas compatible avec DatabaseStructure<T>.getPreparedValue(T) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 19 mars 2008 Partager Posté(e) le 19 mars 2008 Tu as deux solutions. La première est de paramétrer le type en retour de ta méthode : public interface DatabaseStructure2<T,R> { public R getPreparedValue(T t); } public class IntegerStructure2 implements DatabaseStructure2<String,Integer> { @Override public Integer getPreparedValue(String t) { return 42; } } La seconde méthode est d'utiliser tout simplement les types de retour covariants : public interface DatabaseStructure3<T> { public Object getPreparedValue(T t); } public class IntegerStructure3 implements DatabaseStructure3<String> { @Override public Integer getPreparedValue(String t) { return 42; } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
windu.2b Posté(e) le 20 mars 2008 Auteur Partager Posté(e) le 20 mars 2008 Bon, je viens de tester ça à l'instant... Et ta 2° méthode ( les types de retour covariants) semble fonctionner parfaitement Merci beaucoup :fete: Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.