从这个SO answer开始,我收集到的是,如果不设置setAccessible(true)
,则无法访问私有字段。我可以使用isAccessible()
确定某个字段是否公开。但是,我如何确定它是公开的还是私人的?
答案 0 :(得分:5)
您可以使用Field.getModifiers()
获取字段修饰符。然后,您可以使用Modifier.is*
查找:
int modifiers = field.getModifiers();
if(Modifier.isProtected(modifiers)) {
// protected
}
else if(Modifier.isPrivate(modifiers)) {
// private
}
答案 1 :(得分:1)
鉴于此课程
class MyClass {
public String v1;
protected String v2;
private String v3;
}
您可以通过这种方式检查修饰符
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
Field field;
int modifier;
field = MyClass.class.getDeclaredField("v1");
modifier = field.getModifiers();
System.out.println(Modifier.toString(modifier));
field = MyClass.class.getDeclaredField("v2");
modifier = field.getModifiers();
System.out.println(Modifier.toString(modifier));
field = MyClass.class.getDeclaredField("v3");
modifier = field.getModifiers();
System.out.println(Modifier.toString(modifier));
打印出来:
public
protected
private
答案 2 :(得分:0)
你弄错了。您不需要反射来访问公共字段。你可以直接访问它们,这就是为什么它们首先是公开的。
除此之外,你可以使用getModifiers
并解析它。见Retrieving and Parsing Field Modifiers
答案 3 :(得分:0)
public class Model {
public int pub;
private int priv;
}
和
public static void main(String[] args) {
Field[] fields = Model.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
System.out.println(field.getName() + " : " + Modifier.toString(field.getModifiers()));
}
}