Jump to content

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


Recommended Posts

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)
Link to comment
Share on other 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;
}	
}

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...