У меня есть следующие классы:
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.