gpt4 book ai didi

java - 在将对象从 Java 传递到 Jython 时保留对象的 Java 类型

转载 作者:太空狗 更新时间:2023-10-30 01:35:33 25 4
gpt4 key购买 nike

我想知道当您将 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 的 boolean 值(即 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 类,它可以在 here 中找到。 .

最佳答案

您使用的似乎是旧版本的 Jython。在当前的 Jython 版本中,Python bool 类型对应于 Java Boolean

Jython 不会在进入 ArrayList 的过程中将 Java 类型转换为 Python 类型 - 相反,它会在将原始 Python 类型传递给时将其转换为原始或包装 Java 类型一个 Java 方法,以及一个 Java 类型到 Python 类型的出路。

您可以通过打印数组的内容来观察这一点。请注意,Python bool 是大写的 (True); Java Boolean 不是。

>>> from java.lang import Boolean
>>> b = Boolean('True')
>>> b
true
>>> from java.util import ArrayList
>>> l = ArrayList()
>>> l.add(b)
True
>>> l
[true]
>>> l.add(True)
True
>>> l
[true, true]
>>> list(l)
[True, True]

如果这仍然不能满足您的要求,请考虑编写一个小的 Java 辅助函数来为您检查数组而无需转换。 Jython 不会自动将您构造的 Boolean 转换为 Python bool,这可以说是一个错误,在这种情况下,与使用 Boolean 相比,它没有任何优势。 TRUE 或 Python True

关于java - 在将对象从 Java 传递到 Jython 时保留对象的 Java 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com