因此,我一直在使用注释处理器来为已生成的java bean类生成一些代码。
我已成功找到带注释的类及其超类中的所有字段,但已经碰壁了。我还想为从带注释的类型引用的任何类型生成代码。
private OtherType beanProperty;
我可以通过获取带注释的类中的所有字段并检查元素类型的类型来获取OtherType
if (property.asType().getKind() == TypeKind.DECLARED) {
propety.asType(); // "example.OtherType"
}
但是如果bean属性是:
private List<OtherType> beanProperty;
我无法通过beanProperty的OtherType
定义获得VariableElement
。
if (types.isAssignable(property.asType(), COLLECTION)) {
property.asType(); // "java.util.List"
((DeclaredType) property.asType()).getTypeArguments().get(0); // "E"
}
结果是List的类型变量,而不是我的字段定义中的特定List。
但是,如果我找到beanProperty的setter,并获取setter的参数:
ExecutableElement ee = (ExecutableElement) setter;
for (VariableElement tpe: ee.getParameters()) {
tpe.asType(); // "java.util.List<example.OtherType>"
(((DeclaredType) tpe.asType()).getTypeArguments().get(0); // "example.OtherType"
}
我有什么深刻的东西在这里失踪吗?或者这可能是正确的方法?