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