scala中的Java类反射

scala中的Java类反射,java,scala,reflection,Java,Scala,Reflection,我试图在scala上使用java的反射API。我有一个使用类加载器从字节码加载的KDTree类。以下是它的方法: public class KDTree { public KDTree(int k) public void insert(double[] key, Object value) throws Exception public Object[] range(double[] lowk, double[] uppk) throws Exception } 下面是我的包装器scala类

我试图在scala上使用java的反射API。我有一个使用类加载器从字节码加载的KDTree类。以下是它的方法:

public class KDTree
{
public KDTree(int k)
public void insert(double[] key, Object value) throws Exception
public Object[] range(double[] lowk, double[] uppk) throws Exception
}
下面是我的包装器scala类:

class KDTree( dimentions: Int )
    //wrapper!
    {
    private val kd= Loader.loadClass("KDTree")
    private val constructor= kd.getConstructor(java.lang.Class.forName("java.lang.Integer"))
    val wrapped= constructor.newInstance("1")
    def insert( key:Array[Double], element:Object)=
        kd.getDeclaredMethod("insert", classOf[Array[Double]])
            .invoke(key, element)
    def range( lowkey:Array[Double], highkey:Array[Double])=
        kd.getDeclaredMethod("range", classOf[Array[Double]])
            .invoke(lowkey, highkey)
    }
当我尝试初始化时,我得到一个错误:

java.lang.NoSuchMethodException: KDTree.<init>(java.lang.Integer)

您的问题是,您试图用类型参数
java.lang.Integer
加载构造函数。用
int.class
试试


另外,编写
kd.getConstructor(int.class)

也比较短。您的问题是,您试图用类型参数
java.lang.Integer
加载构造函数。用
int.class
试试


另外,编写
kd.getConstructor(int.class)

要短得多,我认为我的示例要简单得多,但这可能是因为我编写了它:

类配置{
val c=“一些配置”
}
类Moo(c:Config){
val x=“哟!”
}
类Loo(c:Config)扩展了Moo(c){
覆盖val x=c.c+“yodel!”
}
对象调用{
def main(参数:数组[字符串]){
val cn=新配置
//val m:Moo=新Loo(cn)
val c=类别forName(“Loo”)
val ars=c.getConstructor(classOf[Config])
val m:Moo=ars.newInstance(cn).asInstanceOf[Moo]
println(m.x)
}
}
打印出来

some config yodel!

我认为我的例子要简单得多,但这可能是因为我写了:

类配置{
val c=“一些配置”
}
类Moo(c:Config){
val x=“哟!”
}
类Loo(c:Config)扩展了Moo(c){
覆盖val x=c.c+“yodel!”
}
对象调用{
def main(参数:数组[字符串]){
val cn=新配置
//val m:Moo=新Loo(cn)
val c=类别forName(“Loo”)
val ars=c.getConstructor(classOf[Config])
val m:Moo=ars.newInstance(cn).asInstanceOf[Moo]
println(m.x)
}
}
打印出来

some config yodel!

正如我提到的,在scala
anything.class
complainsUse
classOf[Integer]
classOf[int]
ans中描述了。正如我提到的,在scala
anything.class
complainsUse
classOf[Integer]
中描述了ans。这里到底为什么需要反射?@Arjan因为,KDTree是Java库的一部分为什么这里需要反射?@Arjan因为,KDTree是Java库的一部分