如何从Java反射性地获取Scala对象上的字段?

时间:2012-04-17 21:37:45

标签: java scala reflection scala-java-interop

我有以下对象:

 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?????

谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

clazz.getDeclaredFields()开始 - 这为您提供了所有在课堂上声明的字段,而不仅仅是公共字段。您可能会发现它们是私有的,实际上是合成的吸气剂。因此,请使用getDeclaredMethods检查所有方法。打印出所有内容,看看发生了什么。如果不是太麻烦,回过头来发现,对其他人来说这可能是一个有趣的读物。

答案 2 :(得分:0)

我不确定你想要达到的目标,但如果你只想要价值而不需要反思:

public class Test {
    public static void main(String[] s) {
        System.out.println(com.rock.Asteriod$.MODULE$.orbitDiam());
    }
}