在R中使用rJava的Java包装器

在R中使用rJava的Java包装器,java,r,rjava,Java,R,Rjava,我使用package为in R创建包装器。目前,我只想为上述java实现中存在的GeneratedSuffixTree类的两个方法(put和search)创建包装器 GeneratedSuffixTree类的search()方法的签名为 public Collection<Integer> search(String word){ return search(word, -1); } 我想我在R中对Integer collection做了一些错误的铸造。我可

我使用package为in R创建包装器。目前,我只想为上述java实现中存在的GeneratedSuffixTree类的两个方法(put和search)创建包装器

GeneratedSuffixTree
类的
search()
方法的签名为

public Collection<Integer> search(String word){
        return search(word, -1);
    }
我想我在R中对Integer collection做了一些错误的铸造。我可以知道我哪里做错了吗


完整的开发中包装包出现在

中,问题在于JNI类型。因为search方法返回一个集合,对于集合,JNI指定为
Ljava/util/collection

因此,正确的包装方法是:

callsearch <- function(key){
     hook2 <- .jnew("GeneralizedSuffixTree") # instance of class
     out <- .jcall(hook2,"Ljava/util/Collection;","search",as.character(key), evalArray= FALSE, evalString = FALSE)
     return(out)
}

callsearch如果您在java代码中将返回类型从
Collection
更改为
Object
,它会工作吗?是的,它会工作。在我的java代码中,我将集合更改为数组返回类型,它工作得非常好。但我更关心收藏。
Error in .jcall(hook2, "Ljava/lang/Object", "search", as.character(key),  : 
  method search with signature (Ljava/lang/String;)Ljava/lang/Object not found
callsearch <- function(key){
     hook2 <- .jnew("GeneralizedSuffixTree") # instance of class
     out <- .jcall(hook2,"Ljava/util/Collection;","search",as.character(key), evalArray= FALSE, evalString = FALSE)
     return(out)
}
 javap -s <java-classname>