我有以下类:静态块和Field.get(空)与静态不原始数据字段
public class A {
static {
B.load(A.class);
}
public static final C field1 = new C("key1", "value1");
public static final C field2 = new C("key2", "value2");
public static void main(String[] args) {
System.out.println(A.field1);
}
}
和
public class B {
public static void load(Class<?> clazz) {
for (Field field : clazz.getFields()) {
try {
System.out.println("B.load -> field is " + field.get(null));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
和
public class C {
private final String key;
private final String value;
public C(String key, String value) {
super();
this.key = key;
this.value = value;
}
public String getKey() {
return this.key;
}
public String getValue() {
return this.value;
}
@Override
public String toString() {
return "C [key=" + this.key + ", value=" + this.value + "]";
}
}
当A是执行我得到:
B.load -> field is null
B.load -> field is null
C [key=key1, value=value1]
被执行时,它为什么field.get(空)返回null值?我也没有例外,Javadoc似乎没有解释这种行为。
谢谢,它解决了这个问题,但还是有一些我不明白。为什么如果我使用原始数据类型而不是C出现问题(例如,静态int field1 = 1和静态int field2 = 2与静态块包含B.load之前声明的领域)? – Laurent
@Laurent我会编辑一些信息。 –