我有以下情况(我知道这听起来不真实,但我简化了它以便更好地理解):
- 一个
class A
,带有public static int f;
声明 - 其他类(class)
B, C, D, ...
扩展A - 一种方法
foo
(在其他地方,并不重要)具有以下签名:int foo(Class< A> classz);
现在我希望此方法实现返回静态字段 f
的值,来自 classz
代表的类; A
的子类可能有不同的值。我不想使用反射(也不想使用新的 jdk7 invoke.* 功能)。目前,我有一个可行的解决方案,但效果不佳,因为它实例化了一个对象(这不是必需的),并通过从实例访问静态字段来生成警告:
int foo(Class< A> classz) throws [don't matter] {
return classz.newInstance().f;
}
有什么建议吗? 提前致谢?
PS:不知道如何输入Class< ?>
没有空间...
最佳答案
目前还不清楚您要做什么或为什么要通过类(class) - 看起来您应该只需要:
int foo() {
return A.f;
}
成功后,这就是您当前的代码将返回的内容。您的代码相当于:
int foo(Class<A> classz) throws ... {
A ignored = classz.newInstance();
return A.f;
}
听起来您尝试对静态字段使用多态性 - 这根本行不通。静态成员不是多态的,字段也不是多态的。如果您在每个子类中声明额外的 f
字段,您将必须使用反射来获取它们,但我建议您无论如何重新设计。如果您没有在每个子类中声明额外的 f
字段,那么您无论如何都只有一个字段 - B.f
和 C.f无论如何,
基本上都会解析为A.f
...
关于java - 从 Class<A> 变量访问静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019507/