2010-02-01 4 views
1

J'utilise Javassist dans un générateur de code que j'écris. C'est plutôt bien, mais j'ai rencontré un problème.En utilisant Javassist, comment déterminez-vous si un CtField est une collection?

Lorsque je regarde le CtField en question, je veux déterminer s'il s'agit d'une collection ou non. C'est assez trivial avec la réflexion normale:

Collection.class.isAssignableFrom(...) 

Mais je n'ai pas encore compris comment obtenir le même effet de Javassist. C'est un truc assez basique, donc je dois juste le manquer.

Répondre

1

Je ne pense pas que Javassist a quelque chose de similaire, mais marcher la hiérarchie de l'interface est assez facile.

public boolean isImplementor(final CtClass interfaceClass, 
          final CtClass clazz) throws NotFoundException { 
    return isImplementor(interfaceClass, clazz.getInterfaces()) 
     || isImplementor(interfaceClass, clazz.getSuperclass()); 
} 

private boolean isImplementor(final CtClass interfaceClass, 
           final CtClass[] interfaces) throws NotFoundException { 
    for (final CtClass intf : interfaces) { 
     if (intf == interfaceClass || isImplementor(interfaceClass, 
                intf.getInterfaces())) { 
      return true; 
     } 
    } 
    return false; 
} 
Questions connexes