如何使用Java反射找到成员的访问修饰符

3

使用Java反射查找成员的访问修饰符

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

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


java.lang.reflect.Field - Sergii Lagutin
@SergeyLagutin 我之前看过那个API。它返回一个整数,该整数表示访问修饰符值“private final static long”的总和。我的问题是想知道是否有直接的API来获取“private或public”常量 https://docs.oracle.com/javase/8/docs/api/constant-values.html#java.lang.reflect.Modifier.PRIVATE - Suresh Raja
1
然后看一下所有的 Modifier.is*** 方法:https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Modifier.html#isPrivate-int- - Tunaki
2个回答

6
如果您有一个类(在下面的代码中为Vlucht),那么您可以使用方法getDeclaredFields()...然后每个字段实例都可以调用方法getModifiers,这些方法在下面的表格中解释。
Reflection API自jdk1.5以来一直保持不变,因此java8对于reflection并不重要,而更多地是用于使用流或类似方式访问字段数组。
如果您真的需要像以下这样的可读性高的内容: private static final protected or public
那么请使用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


3

针对类中的所有字段(假设类名为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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接