2

我目前正在编写一个 R 脚本,它使用一个使用 java/lang/Vector 类的 java .jar,在这种情况下,它使用非本机方法中的类。在java源代码中:

public static Vector<ClassName> methodname(String param)

我在 rJava 的文档中没有找到关于如何处理像 vector 这样的模板类以及在使用 jcall 或任何其他方法时要写什么。我目前正在尝试做这样的事情:

v <- .jnew("java/util/Vector")
b <- .jcall(v, returnSig = "Ljava/util/Vector", method = "methodname",param)

但 R 显然抛出了一个异常:

method methodname with signature (Ljava/lang/String;)Ljava/util/Vector not found

如何将模板类用于此命令?或者就此而言,我首先如何创建某个类的向量?这可能吗?

4

1 回答 1

1

rJava不知道 java 泛型,没有语法可以创建Vector给定类型的 a。您只能创建Vectors 的Objects。

既然可以使用系统,为什么还要坚持使用旧的.jcallapi J,它可以让您更好地使用 java 对象:

> v <- new( J("java.util.Vector") )
> v$add( 1:10 )
[1] TRUE
> v$size()
[1] 1
# code completion
> v$
v$add(                 v$getClass()           v$removeElement(
v$addAll(              v$hashCode()           v$removeElementAt(
v$addElement(          v$indexOf(             v$retainAll(
v$capacity()           v$insertElementAt(     v$set(
v$clear()              v$isEmpty()            v$setElementAt(
v$clone()              v$iterator()           v$setSize(
v$contains(            v$lastElement()        v$size()
v$containsAll(         v$lastIndexOf(         v$subList(
v$copyInto(            v$listIterator(        v$toArray(
v$elementAt(           v$listIterator()       v$toArray()
v$elements()           v$notify()             v$toString()
v$ensureCapacity(      v$notifyAll()          v$trimToSize()
v$equals(              v$remove(              v$wait(
v$firstElement()       v$removeAll(           v$wait()
v$get(                 v$removeAllElements()  
于 2012-11-19T11:30:18.487 回答