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

如何从Java反射地获取Scala对象上的字段?,java,scala,reflection,scala-java-interop,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.forNam

我的目标如下:

 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?????
Class clazz=Class.forName(“com.rock.Asteriod$”;
Field=clazz.getField(“模块$”;
//不确定如何获取每个变量?????

谢谢

clazz.getDeclaredFields()
开始——这将为您提供类中声明的所有字段,而不仅仅是公共字段。你可能会发现它们是私有的,并且实际上有合成的getter。因此,请务必使用
getDeclaredMethods
检查所有方法。把所有的东西都打印出来看看发生了什么。如果不太麻烦的话,把研究结果发回来,对其他人来说,这可能是一本有趣的读物。

这是有效的:

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);
Class clazz=Class.forName(“com.rock.Asteriod$”;
Object asteroid=clazz.getField(“模块$”).get(null);
字段orbitDiamField=clazz.getDeclaredField(“orbitDiam”);
orbitDiamField.setAccessible(true);
double-orbitDiam=orbitDiamField.getDouble(小行星);
系统输出打印项次(轨道直径);

并打印结果
334322.3

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

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

另外,请查看类的javap输出以指导您的学习。不幸的是,反射对于我的任务来说是必要的。感谢dhg,这正是我所需要的。它的工作原理与Java一样,但是Scala中的所有字段都是私有的,不管它们的getter和setter的可见性范围如何。