2012-12-21 8 views
9

J'essaie d'utiliser une méthode générique, donc je n'ai pas besoin de répéter le code. J'ai essayé:Méthode générique dans une classe non générique

private Listener createListenerAdapter(Class<T> clazz) 
{ 
    // do something 
} 

(clazz être important parce que class est réservé). Mais Netbeans se plaint que: "Impossible de trouver la classe de symbole T".

Je vais passer dans quelques classes différentes qui ont les mêmes méthodes sur eux. Où suis-je censé définir T?

Répondre

27

Déclarez la méthode que:

private <T> Listener createListenerAdapter(Class<T> clazz) 

Voir la Java Tutorials pour plus d'informations.

Edit: Si T n'est pas lié au type de retour, vous pouvez aussi utiliser un caractère générique:

private Listener createListenerAdapter(Class<?> clazz) 

Edit 1: Si clazz est censé représenter un type de Listener, vous pourrait définir des limites pour limiter l'appelant (pour éviter des moulages et des exceptions d'exécution potentiels):

private <L extends Listener> L createListenerAdapter(Class<L> clazz) 

Ou avec le caractère générique:

private Listener createListenerAdapter(Class<? extends Listener> clazz) 

Mais cela dépend de la façon dont clazz est utilisé dans le corps.

+0

+1 Merci .. Java est un peu rouillé. –

+0

'clazz' est un widget GUI dans GWT. –

+0

Ok, donc probablement 'Class 'est le meilleur ajustement. –

3

déclarations génériques peuvent également être faites à la méthode niveau en les paramétrant comme ceci:

private <T> Listener createListenerAdapter(Class<T> clazz) 
{ 
    // do something 
} 
0

Si vous n'êtes pas en utilisant le type (peu probable, mais vous pouvez essayer d'éviter un avertissement de type brut) :

private Listener createListenerAdapter(Class<?> clazz) 
{ 
    // do something, without knowing the T of the clazz 
} 
Questions connexes