如何使用java反射查找成员的访问修饰符

时间:2016-08-20 10:40:45

标签: java reflection

使用java反射

查找成员的访问修饰符
private final static long serialId = 1L;
protected String title;
public String FirstName;

我需要知道哪个变量是私有的,受保护的和公共的?

2 个答案:

答案 0 :(得分:2)

如果您有课程(在 Vlucht 下面的代码中),那么您可以使用方法 getDeclaredFields() ... 然后每个字段实例都可以调用 getModifiers 方法,这些方法在下表中进行了说明。

自jdk1.5以来,Reflection API一直是相同的,因此java8与反射无关,但更多用于使用流或类似方法访问字段数组。

如果你真的需要人类可读的东西:

  

私人静态决赛

     

受保护或公开

然后使用System.out.println(Modifier.toString(mod));

的System.out.println(Modifier.toString(MOD));

public class Vlucht {
    private final static long serialId = 1L;
    protected String title;
    public String FirstName;

    public static void main(String[] args) {
    Field[] reflectedClass = Vlucht.class.getDeclaredFields();
    for (Field field : reflectedClass) {
        int mod = field.getModifiers();
        System.out.println(mod);
    }
    }
}

enter image description here

答案 1 :(得分:0)

对于类中的所有字段(假设类名为theClass)

Field[] fields = theClass.getDeclaredFields();
for (Field field : fields) {
    int modifers = field.getModifiers();
    if (Modifier.isPrivate(modifers)) {
        System.out.println(field.getName() + " is Private");
    }
}

也可以使用以下方法确定:

boolean isPrivate(Field field){
    int modifers = field.getModifiers();
    return Modifier.isPrivate(modifers);
}

boolean isProtected(Field field){
    int modifers = field.getModifiers();
    return Modifier.isPublic(modifers);
}

boolean isPublic(Field field){
    int modifers = field.getModifiers();
    return Modifier.isProtected(modifers);
}

示例用法(给定一个名为theClass的类)

Field titleField = theClass.getField("title");
boolean titleIsProtected = isProtected(titleField);