我对Java编程比较陌生。我需要使用Reflection获取字段值。我当前的代码看起来像这样(其中超类是一组扩展MySuperClass
)的类:
for (Class<? extends MySuperClass> s : subclasses) {
try {
field = s.getDeclaredField("MY_FIELD");
fieldValue = (String) field.get(null);
} catch ...
我的问题是,每当我调用field.get时,都会收到错误,因为找不到类org.slf4j.LoggerFactory
。这是从哪里来的?好吧,MySuperClass
导入它。我不知道为什么Java认为有必要拥有它,因为我希望获得MY_FIELD
值的类不要导入它。当然,他们扩展MySuperClass
(这是抽象的,如果重要的话)。那么有没有办法 只 从特定的类中获取字段值,而不依赖于超类使用的类?我不需要实例化类或其他东西,只需要获得该值......
我希望我能够很好地解释我的问题是什么,并为我的小Java知识道歉。
非常感谢提前。
答案 0 :(得分:2)
每个班级都取决于
为了检查类的静态变量,调用其静态方法或实例化它,必须首先加载该类。为了加载一个类,还必须加载它的所有依赖项。
使用反射并没有解决上述任何问题,所以基本答案是否定的,没有加载超类的依赖关系就无法读取类的静态变量的值。