windu.2b Posted March 19, 2008 Share Posted March 19, 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) Link to comment Share on other sites More sharing options...
Sentinel Posted March 19, 2008 Share Posted March 19, 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; } } Link to comment Share on other sites More sharing options...
windu.2b Posted March 20, 2008 Author Share Posted March 20, 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: Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.