2016-04-01 6 views
4

Si jeobtenir le type générique de type générique

public abstract class SomeType<T extends SomeOtherType> {} 

public class WrapperType<U extends SomeType<T>> {} 

Est-il possible de modifier la signature ci (ce qui est une erreur "ne peut pas résoudre le symbole « T ») pour que je puisse utiliser le type générique dans WrapperType, disons List<T> ou quelque chose d'analogue?

(Si j'ai posé cette question en utilisant la terminologie erronée, je vous en serais reconnaissant les corrections.)

Répondre

5

Il est assez simple une fois que vous vous rendez compte ce qui se passe. Vous n'avez pas défini T dans le champ de la classe WrapperType. Déclarer avec au moins les mêmes limites que dans SomeType.

class WrapperType<T extends SomeOtherType, U extends SomeType<T>> {} 
+0

Oui, je l'ai compris juste après vous. J'ai supprimé ma réponse, j'approuverai la vôtre quand elle me le permettra. edit: cependant, curieusement, l'ordre ne semblait pas avoir d'importance. – Logan

+0

@Logan Si le paramètre de type supplémentaire va être ennuyeux, vous pouvez également utiliser 'WrapperType >', mais seulement si vous n'avez pas besoin d'utiliser 'T' dans le corps de la classe. –

+0

@Logan La commande n'a pas d'importance est essentielle. Sinon, vous ne pourriez pas faire 'MyClass , U étend SomeOtherType >'. –