apt如何使用Java镜像API确定该类是抽象的?
我正在编写一个注释处理器,并希望根据javax.lang.model.element.VariableElement
确定相应的字段类型是抽象类还是具体类。或者它是一个接口。
怎么做
示例
@SomeAnnotation
public class SomeClass {
private Map<String,String> interfaceField;
private AbstractMap<String,String> abstractField;
private HashMap<String, String> concreteField;
}
因此,每个字段都有VariableElement
。想知道接口字段的类型是一个接口,抽象字段的类型是抽象的,具体字段的类型是具体的类
如果我调用.getModifiers()
,我会得到private。如果我调用.getKind()
,我得到了“FIELD”。所以,这没用
# 1 楼答案
Element#getModifiers()将告诉您
class
是否为abstract
:Element#getKind()将告诉您它是否是
interface
:要从类的所有字段中获取信息,应使用
TypeVisitor
:其中
type_visitor
是您自己定制的TypeVisitor
,通过各种环,它能够获得Element
,您可以调用上面的getKind()
和getModifiers()
方法:鉴于以下类别:
我得到以下输出: