我想知道当你把它们放在Java ArrayList中时,是否有可能没有 jython automagicaly将java对象转换为python类型.
从jython-console复制的示例:
>>> b = java.lang.Boolean("True"); >>> type(b)>>> isinstance(b, java.lang.Boolean); 1
到目前为止,一切都很好,但如果我把对象放在ArrayList中
>>> l = java.util.ArrayList(); >>> l.add(b) 1 >>> type(l.get(0))
该对象被转换为类似python的布尔值(即int)和...
>>> isinstance(l.get(0), java.lang.Boolean) 0
这意味着我再也看不到这曾经是java.lang.Boolean.
澄清
我想真正想要实现的是在将对象从Java传递到Python时摆脱从Java类型到Python类型的隐式转换.我将举一个澄清的例子.
一个Python模块:
import java import IPythonModule class PythonModule(IPythonModule): def method(self, data): print type(data);
以及使用此模块的Java类:
import java.util.ArrayList; import org.python.core.PyList; import org.testng.annotations.*; import static org.testng.AssertJUnit.*; public class Test1 { IPythonModule m; @BeforeClass public void setUp() { JythonFactory jf = JythonFactory.getInstance(); m = (IPythonModule) jf.getJythonObject( "IPythonModule", "/Users/sg/workspace/JythonTests/src/PythonModule.py"); } @Test public void testFirst() { m.method(new Boolean("true")); } }
在这里,我将看到输出'bool',因为隐式转换,但我真正想要的是看到'javainstance'或'java.lang.Boolean'.如果要运行此代码,还需要可在此处找到的JythonFactory类.