java - 从 Class<A> 变量访问静态字段

标签 java class static

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

  • 一个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.fC.f无论如何,基本上都会解析为A.f...

关于java - 从 Class<A> 变量访问静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019507/

相关文章:

java - 在 2 个或更多正则表达式中拆分字符串

java - 匹配算法 (Java)

java - 从最大堆中的任意位置移除一个元素

c# - 接口(interface)疑惑问题

c++ - 类中的 vector (没有类类型)

python - 如何删除实例列表中的 `duplicates'

java - Android 中静态变量的替代品

c++,在子类中,没有对象如何访问父类的方法?

java - 如何追踪 Java 中看似随机的崩溃?

c++ - 将 Cpp 翻译成 Rust,处理全局静态对象