2010-02-01 97 views
1

我正在使用我正在寫的代碼生成器中的Javassist。這很不錯,但我遇到了一個問題。使用Javassist,您如何確定CtField是否爲集合?

當我在看問題的CtField時,我想確定它是否是一個集合。這是正常的反映相當瑣碎:

Collection.class.isAssignableFrom(...) 

但我還沒有完全想通了如何更好地利用Javassist進行同樣的效果。這是非常基本的東西,所以我必須錯過它。

回答

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