使用Javassist,您如何确定CtField是否是一个集合?

时间:2010-02-01 14:28:08

标签: java reflection

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

当我正在查看有问题的CtField时,我想确定它是否是一个集合。通过正常的反思,这非常简单:

Collection.class.isAssignableFrom(...)

但是我还没有想出如何从Javassist中获得同样的效果。这是非常基本的东西,所以我一定要错过它。

1 个答案:

答案 0 :(得分:1)

我认为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;
}