如何在 RJava 中使用零值调用带有可变参数的方法?

How to call methods with varargs in RJava with zero values?

我正在开发一个使用 RJava 进行标识符映射(在生物学中)的软件包:BridgeDbR。其中一种方法调用 Java 方法,该方法具有变量 mapID():

xref <- .jnew("org/bridgedb/Xref", identifier, datasource)
datatarget <- getDataSource(code=target)
targets = .jarray(c(datatarget), contents.class="org/bridgedb/DataSource")

这里的 getDataSource() 方法 return 是一个 Java 类型的对象 org.bridgedb.DataSource.

然后进行感兴趣的实际调用,其中(如上所示)外部参照和目标是 Java 对象,映射器也是 Java 对象,见下文:

mappings = mapper$mapID(xref, targets)

此映射器对象是 IDMapper 接口的一个实例,并使用变量定义了 mapID() 方法:

public Set<Xref> mapID (Xref ref, DataSource... tgtDataSources)
  throws IDMapperException;

现在,我想在没有数据源的情况下调用这个方法。在 Java 我会这样做:

someMapper.mapID(someXref)

...和Java找到这个方法。

但是,我不知道如何在 RJava 中执行此操作。以下变体都不起作用(例如 .jarray(c(), contents.class="org/bridgedb/DataSource") return NULL:

mappings = mapper$mapID(xref, c())
mappings = mapper$mapID(xref)
mappings = mapper$mapID(xref, NULL)
mappings = mapper$mapID(xref, .jarray(c(), contents.class="org/bridgedb/DataSource"))

.jmethods(mapper, name="mapID") 的输出是:

[1] "public java.util.Set org.bridgedb.rdb.SimpleGdbImplCommon.mapID(org.bridgedb.Xref,org.bridgedb.DataSource[]) throws org.bridgedb.IDMapperException"
[2] "public java.util.Map org.bridgedb.rdb.IDMapperRdb.mapID(java.util.Collection,org.bridgedb.DataSource[]) throws org.bridgedb.IDMapperException"     

如何仅通过外部参照调用 RJava 的 Java 方法 (mapper$mapID)?

正如 https://www.rforge.net/doc/packages/rJava/jarray.html 中所指出的,您应该在对 .jarray 的调用中提供一个列表,可能带有单个 NULL 元素