2009-09-24 6 views
0

Je rencontre un problème avec mon programme où un objet et un nom d'attribut sont renvoyés pour renvoyer le type de retour de la méthode.Java Création d'une nouvelle classe avec des génériques

public static Class<?> getAttributeType(Object object, String attributeName) { 
    try { 
     Method method = object.getClass().getMethod(
      "get" + StringUtils.capitalize(attributeName)); 
     return method.getReturnType(); 
    } catch (Exception e) { 
      throw new RuntimeException("Unable to find the attribute:" 
       + attributeName + " in class: " 
       + object.getClass().getName()); 
    } 
} 

Cette solution fonctionne très bien à moins que le type de retour d'une méthode ait un générique défini. Par exemple, si le prototype de méthode en question est List> getBooks> getBooks(), le code ci-dessus retournera simplement une liste au lieu d'une liste < Book>. Y a-t-il un moyen pour moi d'accomplir cela? Je peux facilement obtenir le type générique, je ne sais pas quoi faire une fois que je l'ai.

Merci à l'avance

+4

En guise de meilleure pratique, je suggère que vous incluiez l'exception originale 'e' comme source pour la RuntimeException que vous lancez. Vous gagnerez tellement de temps à avoir accès à l'exception originale, celle qui dit ce qui a vraiment mal tourné. Bon que vous fournissez et un message supplémentaire avec le contexte si :-) – KLE

Répondre

3

Pour obtenir le type générique de retour d'une méthode, utilisez la méthode getGenericReturnType(). Cela renvoie un type, que vous testez puis et vers le bas à un ParameterizedType que vous pouvez ensuite interroger pour les paramètres de type.

0

Tout n'est pas possible via la réflexion, mais avec une bibliothèque de bytecodes comme ObjectWeb ASM. L'approche est décrite dans le document this article.

Questions connexes