我想知道当您将 java 对象放入 Java ArrayList 时,是否可以不让jython 自动将它们转换为 python 类型。
从 jython 控制台复制的示例:
>>> b = java.lang.Boolean("True");
>>> type(b)
<type 'javainstance'>
>>> isinstance(b, java.lang.Boolean);
1
到目前为止,一切都很好,但是如果我将对象放在 ArrayList
>>> l = java.util.ArrayList();
>>> l.add(b)
1
>>> type(l.get(0))
<type 'int'>
对象被转换为类似 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 类。