Element#getModifiers() 会告诉你class 是否为abstract:
if (element.getModifiers().contains(Modifier.ABSTRACT)) { ... }
Element#getKind() 会告诉你它是否是interface:
if (element.getKind() == ElementKind.INTERFACE) { ... }
要从类的所有字段中获取信息,您应该使用TypeVisitor:
TypeVisitor<Void, VariableElement> type_visitor = new TV();
for (VariableElement field : ElementFilter.fieldsIn(cls.getEnclosedElements())) {
field.asType().accept(type_visitor, field);
}
其中type_visitor是你自己定制的TypeVisitor,通过各种圈套,可以得到一个Element你可以调用上面的getKind()和getModifiers()方法上:
class TV extends SimpleTypeVisitor8<Void, VariableElement> {
@Override
public Void visitDeclared(DeclaredType type, VariableElement field) {
System.out.println(field.getSimpleName());
System.out.println(" type = " + type.toString());
System.out.println(" modifiers = " + field.getModifiers());
Element e = type.asElement();
System.out.println(" kind = " + e.getKind());
System.out.println(" modifiers = " + e.getModifiers());
return null;
}
}
给定以下类:
public class MyClass {
private Properties properties;
private List<String> strings;
// ...
}
我得到以下输出:
properties
type = java.util.Properties
modifiers = [private]
kind = CLASS
modifiers = [public]
strings
type = java.util.List<java.lang.String>
modifiers = [private]
kind = INTERFACE
modifiers = [public, abstract]