3

我有以下对象:

 package com.rock

 object Asteriod {
    val orbitDiam = 334322.3
    val radius = 3132.3
    val length = 323332.3
    val elliptical = false
 }

如何使用 Java 反射来获取每个变量的值?我可以从对象中获取方法,但似乎无法弄清楚如何获取字段。这可能吗?

  Class<?> clazz = Class.forName("com.rock.Asteriod$");
  Field field = clazz.getField("MODULE$");
   // not sure what to do to get each of the variables?????

谢谢!

4

3 回答 3

2

这有效:

Class<?> clazz = Class.forName("com.rock.Asteriod$");
Object asteroid = clazz.getField("MODULE$").get(null);

Field orbitDiamField = clazz.getDeclaredField("orbitDiam");
orbitDiamField.setAccessible(true);
double orbitDiam = orbitDiamField.getDouble(asteroid);

System.out.println(orbitDiam);

并打印结果334322.3

于 2012-04-17T22:06:29.437 回答
0

开始clazz.getDeclaredFields()- 这为您提供了类中声明的所有字段,而不仅仅是公共字段。您很可能会发现它们是私有的并且实际上具有合成的吸气剂。所以也要检查所有的方法getDeclaredMethods。打印所有内容以查看发生了什么。如果它不是太麻烦,发回调查结果,对其他人来说可能是一个有趣的读物。

于 2012-04-17T21:43:18.320 回答
0

我不确定您要实现什么,但是如果您只想要不需要反思的价值观:

public class Test {
    public static void main(String[] s) {
        System.out.println(com.rock.Asteriod$.MODULE$.orbitDiam());
    }
}
于 2012-04-17T22:26:32.077 回答