使用Javassist,如何确定CtField是否为集合?

使用Javassist,如何确定CtField是否为集合?,java,reflection,Java,Reflection,我正在编写的代码生成器中使用Javassist。这很好,但我遇到了一个问题 当我查看有问题的CtField时,我想确定它是否是一个集合。这对于正常反射来说非常简单: Collection.class.isAssignableFrom(...) 但我还没有完全弄明白如何从Javassist中获得同样的效果。这是非常基本的东西,所以我一定错过了它。我不认为Javassist有任何类似的东西,但是遍历接口层次结构相当容易 public boolean isImplementor(final CtCl

我正在编写的代码生成器中使用Javassist。这很好,但我遇到了一个问题

当我查看有问题的CtField时,我想确定它是否是一个集合。这对于正常反射来说非常简单:

Collection.class.isAssignableFrom(...)

但我还没有完全弄明白如何从Javassist中获得同样的效果。这是非常基本的东西,所以我一定错过了它。

我不认为Javassist有任何类似的东西,但是遍历接口层次结构相当容易

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;
}

我不认为Javassist有任何相似之处,但是遍历接口层次结构相当容易

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;
}