rJava - .jcall 调用问题:未找到带有签名的方法
rJava - .jcall calling issue: method with signature not found
几天来,我一直在尝试使用 rJava 调用 java class 中的一个方法,但我还没有弄清楚我做错了什么。也许这里有人会为我提供一些线索。
情况是这样的:
我加载库并初始化一个对象(工作正常):
library(rJava)
.jinit('C:/javatemp/worker.jar')
jobject <- .jnew("worker.concrete")
我列出了方法并得到了很好的结果:
.jmethods(jobject)
> [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)"
我正在准备也能正常工作的输入结构:
word <- .jnew("java/lang/String", "a word")
input = .jcast(word, "java/lang/CharSequence", check = TRUE)
然而,当我尝试执行该方法时,出现错误,提示该方法不存在...
out = .jcall(jobject,"Ljava/util/List","lookup",input)
> Error in .jcall(jobject, "Ljava/util/List", "lookup", input) :
method lookup with signature (Ljava/lang/CharSequence;)Ljava/util/List not found
有谁知道如何调用这样的方法吗?
很抱歉回答一个老问题,但这也困扰了我一段时间。答案是:;
非基本 return 类型的类型规范格式为 Lpackage/subpackage/Type;
- 它必须以分号结尾。所以在上面的例子中,你需要:
out = .jcall(jobject,"Ljava/util/List;","lookup",input)
几天来,我一直在尝试使用 rJava 调用 java class 中的一个方法,但我还没有弄清楚我做错了什么。也许这里有人会为我提供一些线索。
情况是这样的:
我加载库并初始化一个对象(工作正常):
library(rJava) .jinit('C:/javatemp/worker.jar') jobject <- .jnew("worker.concrete")
我列出了方法并得到了很好的结果:
.jmethods(jobject) > [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)"
我正在准备也能正常工作的输入结构:
word <- .jnew("java/lang/String", "a word") input = .jcast(word, "java/lang/CharSequence", check = TRUE)
然而,当我尝试执行该方法时,出现错误,提示该方法不存在...
out = .jcall(jobject,"Ljava/util/List","lookup",input) > Error in .jcall(jobject, "Ljava/util/List", "lookup", input) : method lookup with signature (Ljava/lang/CharSequence;)Ljava/util/List not found
有谁知道如何调用这样的方法吗?
很抱歉回答一个老问题,但这也困扰了我一段时间。答案是:;
非基本 return 类型的类型规范格式为 Lpackage/subpackage/Type;
- 它必须以分号结尾。所以在上面的例子中,你需要:
out = .jcall(jobject,"Ljava/util/List;","lookup",input)