对于这个问题,我看spring 源码时候发现有这个比较好用的类,然后自己用了一下,发现有一点坑,这里提出来,
说说现象,对于这个类的理解,就是讲一个类里面的静态变量public static Final)放入到一起
他有一下要求
1.必须是public class
2,必须在本类调用
这样可以把问题出现的概率竟可能小
说书今天我踏过坑
这个是源码
try {
Object value = field.get((Object)null);
this.fieldCache.put(name, value);
} catch (IllegalAccessException var9) {
;
}
应为马油打印问题,所以我复制的一份源代码
try {
Object value = field.get((Object)null);
this.fieldCache.put(name, value);
} catch (IllegalAccessException var9) {
var9.printStackTrace();
}
把我的demo类和复制的源码的类放在一个package 下,但是就是现在出现问题,我改过的代码,可以越过以前的Constants所设置的障碍,直接可以访问,后来我把,我复制的Constants,移动其他包下,果然和spring 源码Constants出现,并且爆出了我想要的堆栈信息,后台我想了这样的一段代码
if (!Modifier.isPublic(getClassAccessFlags(var1))) {
var5 = isSameClassPackage(var0, var1);
var4 = true;
if (!var5) {
return false;
}
}
这就可以解释之前我出那个问题,他这个类会检查,你的demo是否在同在一个package下面
如果在同一个packge,他就可以直接访问你的属性,如果不在同一个package 下面,直接抛出访问异常
但是还有一个问题,那就是
class Man {
public static final int VALIDATION_NONE = 0;
public static final int VALIDATION_AUTO = 1;
public static final int VALIDATION_DTD = 2;
public static final int VALIDATION_XSD = 3;
private ConstantsF constants = new ConstantsF(Man.class);
public Man() {
System.out.println(Arrays.toString(constants.getNamesForSuffix("NONE").toArray()));
}
public static void main(String[] args) {
Man man = new Man();
}
}
public class Main {
public static void main(String[] args) throws IllegalAccessException {
}
}
不是public class ,连自己的属性否不能访问,但是可以访问其他的public class