从类<a> variable</a>访问静态字段

时间:2011-11-05 10:14:36

标签: java class static

我有以下情况(我知道这听起来并不真实,但为了更好地理解我简化了它):

  • class A,声明了public static int f;
  • 扩展A
  • 的其他类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< ?> ...

1 个答案:

答案 0 :(得分:2)

目前还不是很清楚你要做什么,或者为什么你要上课 - 看起来你应该只需要:

int foo() {
    return A.f;
}

成功之后,这就是您当前的代码将会返回的内容。您的代码相当于:

int foo(Class<A> classz) throws ... {
    A ignored = classz.newInstance();
    return A.f;
}

听起来你尝试使用静态字段的多态性 - 这根本不起作用。静态成员不是多态的,也不是字段。如果你在每个子类中声明额外的f个字段,你 必须使用反射来获取它们,但我建议你重新设计。如果您在每个子类中声明额外的f字段,那么您仍然只有一个字段 - B.fC.f基本上会解析为{ {1}}无论如何......