rJava - 未找到签名的方法

时间:2017-05-31 11:16:37

标签: java r java-native-interface rjava r-package

我的问题与此one类似: 即使添加分号也不适合我,这是我的方法,当我调用.jmethod为我显示它时:

  

[10]" public java.util.Set utils.Rinterface.getPhones()"

当我调用方法时,像这样

  

rJava :: jcall(rinterface," Ljava.util.Set;"" getPhones&#34)

我收到了这个错误:

  

rJava ::。jcall(rinterface," Ljava.util.Set;"," getPhones"):方法   getPhones with signature()Ljava.util.Set;没发现它给了它   错误,仍然不知道什么是错的?!

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此示例树结构:

.
└── utils
    └── Rinterface.java

并且使用超级简单的类

package utils;

import java.util.Set;

public class Rinterface {
    public java.util.Set getPhones() {
        return new java.util.HashSet();
    }
}

确保使用与rJava相同的Java版本进行编译。

设置Java env

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;

<强> 更新

更新以反映正确的包装布局