Aller au contenu

[Résolu][Java]Types paramétrés et types de retour


windu.2b

Messages recommandés

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 ? :transpi:

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...