2010-03-30 8 views
8

Je veux créer une classe qui prend deux paramètres. L'un devrait être tapé simplement comme T. L'autre devrait être tapé comme quelque chose qui s'étend à la fois T et SomeInterface<T>. Lorsque je tente cela avecÉtendre à la fois T et SomeInterface <T> en Java

public class SomeClass<T, S extends SomeInterface<T> & T> 

alors Java se plaint avec

« Le type T n'est pas une interface, il ne peut pas être spécifié comme un paramètre borné »

et si au lieu que je tente de créer un Interface S avec

public interface TandSomeInterface<T> extends SomeInterface<T>, T 

alors Java se plaint avec

"Impossible de se référer au paramètre de type T en tant que supertype"

Y a-t-il un moyen de le faire en Java? Je pense que vous pouvez le faire en C++ ...?

+2

Notez que les modèles de C sont beaucoup plus puissants que les médicaments génériques Java. Ce n'est pas parce que cela peut être fait en C++ que cela peut être fait en Java. –

+0

related: http://stackoverflow.com/a/13261667/697449 –

Répondre

3

Vous ne pouvez pas créer d'interface qui étend le paramètre de type T car aucun contrat ne garantit que T est une interface. Et bien sûr, l'extension d'une classe n'est pas autorisée.

+0

Mais est-il possible de contourner cela pour obtenir le même effet? –

3

cela fonctionne si vous étendez une interface ainsi:

public class SomeClass<T extends I, S extends SomeInterface<T> & I> 

mais peut-être ce n'est pas exactement ce que vous voulez ...