2009-06-23 10 views
4

Fondamentalement, je veux créer une méthode qui a une signature comme ce qui suit:Quelle est la signature générique d'une méthode qui renvoie une instance d'une sous-classe donnée?

public <T> T getShellTab(Class<T extends ShellTab> shellTabClass) 

mais ce n'est pas valide Java.
Je veux être en mesure de passer une classe qui est une sous-classe de ShellTab et ont une instance de cette classe retournée.

public <T> T getShellTab(Class<T> shellTabClass) 

fonctionne très bien, mais je voudrais forcer shellTabClass être une sous-classe de ShellTab.

Toutes les idées sur la façon de retirer ceci?

Merci.

Répondre

12

Mettre la contrainte dans le paramètre générique initial, comme ceci:

public <T extends ShellTab> T getShellTab(Class<T> shellTabClass) 

Notez que vous pouvez avoir des contraintes sur les paramètres de type générique des paramètres de la méthode (par exemple, Tom Hawtin - tackline suggère de faire shellTabClass dans un Class<? extends T>, bien que je ne pense pas que cela fasse une différence dans ce cas).
Mais vous ne pouvez pas contraindre un type qui a déjà été déclaré.

+0

Probablement du public T getShellTab (classe shellTabClass). –

+0

Est-ce que cela achète quelque chose sur ce que j'ai posté? T pourrait être n'importe quelle sous-classe de ShellTab de toute façon, non? –

+0

D'Oh! C'est si simple maintenant! Génial, ça marche super merci. – Sandro

3

Que pensez-vous de cela?

public <T extends ShellTab> T getShellTab(Class<T> shellTabClass) 
Questions connexes