首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用rJava的Java包装器

在R中使用rJava的Java包装器
EN

Stack Overflow用户
提问于 2015-10-06 15:14:32
回答 1查看 816关注 0票数 4

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

search()类的GeneralizedSuffixTree方法的签名是

代码语言:javascript
复制
public Collection<Integer> search(String word){
        return search(word, -1);
    }

相应地,我创建了以下包装方法:

代码语言:javascript
复制
   callsearch <- function(key){
     hook2 <- .jnew("GeneralizedSuffixTree") # instance of class
     out <- .jcall(hook2,"Ljava/lang/Object","search",as.character(key), evalArray= FALSE, evalString = FALSE)
     return(out)
}

因此,每当我使用callsearch("abcdea")从rstudio调用搜索方法时,我就会得到以下错误

代码语言:javascript
复制
Error in .jcall(hook2, "Ljava/lang/Object", "search", as.character(key),  : 
  method search with signature (Ljava/lang/String;)Ljava/lang/Object not found

我想我对R.的Integer系列做了一些错误的选择,我能知道我在哪里做错了吗?

完整的未开发包装包出现在链接上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-07 10:34:00

问题在于JNI类型。因为search方法返回集合,而对于集合,JNI指定为Ljava/util/Collection;

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

代码语言:javascript
复制
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)
}

附加信息:对于任何java类,都可以在命令提示符下找到JNI类型

代码语言:javascript
复制
 javap -s <java-classname>

集合示例:javap -s java.util.Collections

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32973543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档