如何使用 rJava 访问枚举?

How do I access Enums using rJava?

我正在使用名为 CDK 的第三方库。我正在尝试使用 rJava:

创建 class Bond 的实例
o1 <- .jnew("org.openscience.cdk.Atom","O")
o2 <- .jnew("org.openscience.cdk.Atom","O")
J("org.openscience.cdk.Bond",o1,o2,
  "org.openscience.cdk.interfaces.IBond.Order.SINGLE")

问题是在此接口 IBond 中定义了一个枚举,我需要将其作为参数传递给构造函数 Bond(IAtom atom1, IAtom atom2, IBond.Order order) 但我不知道如何使用 rJava.

我试过了

J("org.openscience.cdk.Bond",o1,o2,
  J("org.openscience.cdk.interfaces.IBond.Order")$SINGLE)

希望 SINGLE 可以像任何其他静态一样访问 field/method 但它没有用。

有什么方法可以使用 rJava 将 Enum 传递给方法吗?

我已经找到方法了,我使用美元符号来引用在 IBond 接口中声明的 public Enum Order 然后另一个美元符号来引用访问枚举值:

J("org.openscience.cdk.interfaces.IBond")$Order$SINGLE

它是一个嵌套的 class 所以正确的名字是 org.openscience.cdk.interfaces.IBond$Order:

> .jfields("org.openscience.cdk.interfaces.IBond$Order")
[1] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.SINGLE"   
[2] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.DOUBLE"   
[3] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.TRIPLE"   
[4] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.QUADRUPLE"
[5] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.QUINTUPLE"
[6] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.SEXTUPLE" 
[7] "public static final org.openscience.cdk.interfaces.IBond$Order org.openscience.cdk.interfaces.IBond$Order.UNSET"    

所以 "normal" 方式可以是

> .jfield("org.openscience.cdk.interfaces.IBond$Order",,"SINGLE")
[1] "Java-Object{SINGLE}"
> J("org.openscience.cdk.interfaces.IBond$Order")$SINGLE
[1] "Java-Object{SINGLE}"