2012-05-04 91 views
1

如何迭代Jython PyList並將我包含的對象轉換或轉換爲java.lang.String?在this老教程Jython PyList映射到列表<String>和其他Jython到Java變量映射

,它是通過使用__ tojava __喜歡做:

(EmployeeType)employeeObj.__tojava__(EmployeeType.class); 

我suppsoe這可能是這樣的:

PyList pywords = pythonFactoryCreatedObject.pythonMethodReturningPyList() 

int count = pywords.__len__(); 
for (int idx = 0 ; idx < count ; idx++) { 
    PyObject obj = pywords.__getitem__(idx); 

    //here i do not know how to have a kind of 'String word = pywords[idx]' statement 

    //System.out.println(word); 
} 

是不是也可以有:

  • 從PyList到java數組或列表的轉換?這樣就可以使用構造'for(String word:mylist){}'?

  • 我將同樣的麻煩與簡單的Python字典映射到一個足夠的java對象,什麼將是最好的映射?

是否有關於Jython的java部分用法的教程文檔?我是用Python裏是相當好的,但對Java和Jython,我發現只有從Jython的,而我需要嵌入一個Java框架內的一個Python模塊的Java的使用文檔...

最好

回答

2

PyList實際上實現了java.util.List<Object>,所以你可以直接從Java端使用。 如果填充字符串,其元素將是PyString(或者可能是PyUnicode)。 所以:

List pywords = pythonFactoryCreatedObject.pythonMethodReturningPyList(); 
for (Object o : pyList){ 
    String string = ((PyString) o).getString(); 
    //whatever you want to do with it 
} 

List pywords = pythonFactoryCreatedObject.pythonMethodReturningPyList() 
for (Object o : pyList){ 
    String string = ((PyObject) o).__toJava__(String.class); 
    //whatever you want to do with it 
} 

無論你找到更清晰。

編輯: here's the standard doc on embedding Jython into Java。從Java使用Jython的更好方法是從Jython實現Java接口並從Java操作接口,但似乎您正在使用現有的Python代碼庫,所以如果不進行一些更改就無法工作。

+0

謝謝你的有用解釋!我沒有理解__ toJava __的用法,你的回答可以幫助我更好地理解。 – user1340802