rJava - .jcall调用问题:未找到签名的方法

eye*_*eye 6 r rjava

我试图用rJava在java类中调用一个方法几天,我还没弄清楚我做错了什么.也许这里有人会为我提供一些线索.

情况如下:

  1. 我加载库并初始化一个对象(这很好):

    library(rJava)
    .jinit('C:/javatemp/worker.jar') 
    jobject <- .jnew("worker.concrete")
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我列出方法,我得到了很好的结果:

    .jmethods(jobject)
    >  [1] "public java.util.List worker.concrete.lookup(java.lang.CharSequence)"  
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我正在准备输入结构,也可以正常工作:

    word <- .jnew("java/lang/String", "a word")
    input = .jcast(word, "java/lang/CharSequence", check = TRUE)
    
    Run Code Online (Sandbox Code Playgroud)
  4. 但是,当我尝试执行该方法时,我得到一个错误,这种方法不存在...

    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
    
    Run Code Online (Sandbox Code Playgroud)

有谁知道如何调用这种方法?

Mar*_*rák 8

很抱歉回答了一个老问题,但这也困扰了我一段时间.答案是:;

非原始返回类型的类型规范格式是Lpackage/subpackage/Type;- 它必须以分号结尾.所以在上面的例子中,你需要:

out = .jcall(jobject,"Ljava/util/List;","lookup",input)
Run Code Online (Sandbox Code Playgroud)