2015-11-10 67 views
2

我正在使用名爲CDK的第三方庫。我試圖用rJava創建該類Bond的一個實例:如何使用rJava訪問枚舉?

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可以像任何其他靜態字段/方法進行訪問,但沒有奏效。

有沒有辦法將Enum傳遞給使用rJava的方法?

+0

你有沒有設法讓CDK債券創建工作?我遇到了嘗試從R中創建CDK分子的錯誤。 – zach

回答

2

我發現這樣做的方法,我用的是美元符號指在IBond接口中聲明公共枚舉Order,然後另一美元符號來訪問枚舉值:

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

它是一個嵌套類,因此適當的名稱爲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"  

因此,「正常」的方式將任

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