如何使用 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}"
我正在使用名为 CDK 的第三方库。我正在尝试使用 rJava
:
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}"