rJava - 未找到带有签名的方法
rJava - method with signature not found
我的问题与此类似:
即使添加分号对我不起作用,这是我调用 .jmethod 为我显示它时的方法:
[10] "public java.util.Set utils.Rinterface.getPhones()"
当我调用方法时,像这样
rJava::.jcall(rinterface,"Ljava.util.Set;","getPhones")
我遇到了这个错误:
rJava::.jcall(rinterface, "Ljava.util.Set;", "getPhones") : method
getPhones with signature ()Ljava.util.Set; not found it gives that
error, still don't know whats wrong ?!
您可以尝试使用此示例树结构:
.
└── utils
└── Rinterface.java
而且超级简单class
package utils;
import java.util.Set;
public class Rinterface {
public java.util.Set getPhones() {
return new java.util.HashSet();
}
}
确保使用与 rJava 相同的 Java 版本进行编译。
设置Java环境
library(rJava)
.jinit()
# note that you have to point to place where utils directory is
.jaddClassPath(dir("place_where_your_package_is",full.names=TRUE))
obj <- .jnew("utils.Rinterface")
# call method
result=.jcall(obj, returnSig="Ljava/util/Set;", method="getPhones")
你总能得到方法的签名
Compiled from "Rinterface.java"
public class utils.Rinterface {
public utils.Rinterface();
descriptor: ()V
public java.util.Set getPhones();
descriptor: ()Ljava/util/Set;
}
就我而言,它按预期工作。
更新:
在你的情况下,你使用:
Ljava.util.Set;
替换为
Ljava/util/Set;
更新:
已更新以反映正确的包布局
我的问题与此类似
[10] "public java.util.Set utils.Rinterface.getPhones()"
当我调用方法时,像这样
rJava::.jcall(rinterface,"Ljava.util.Set;","getPhones")
我遇到了这个错误:
rJava::.jcall(rinterface, "Ljava.util.Set;", "getPhones") : method getPhones with signature ()Ljava.util.Set; not found it gives that error, still don't know whats wrong ?!
您可以尝试使用此示例树结构:
.
└── utils
└── Rinterface.java
而且超级简单class
package utils;
import java.util.Set;
public class Rinterface {
public java.util.Set getPhones() {
return new java.util.HashSet();
}
}
确保使用与 rJava 相同的 Java 版本进行编译。
设置Java环境
library(rJava)
.jinit()
# note that you have to point to place where utils directory is
.jaddClassPath(dir("place_where_your_package_is",full.names=TRUE))
obj <- .jnew("utils.Rinterface")
# call method
result=.jcall(obj, returnSig="Ljava/util/Set;", method="getPhones")
你总能得到方法的签名
Compiled from "Rinterface.java"
public class utils.Rinterface {
public utils.Rinterface();
descriptor: ()V
public java.util.Set getPhones();
descriptor: ()Ljava/util/Set;
}
就我而言,它按预期工作。
更新:
在你的情况下,你使用:
Ljava.util.Set;
替换为
Ljava/util/Set;
更新:
已更新以反映正确的包布局