Aller au contenu
View in the app

A better way to browse. Learn more.

Next

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Posté(e)

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)

Modifié par windu.2b

Posté(e)

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;
}	
}

Posté(e)
  • Auteur

Bon, je viens de tester ça à l'instant... Et ta 2° méthode ( les types de retour covariants) semble fonctionner parfaitement :chinois:

Merci beaucoup :fete: :fete:

Archivé

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.