Tôi tự hỏi nếu nó có thể không có jython automagicaly chuyển đổi các đối tượng java thành các kiểu python khi bạn đặt chúng trong một ArrayList Java.Bảo quản kiểu Java của một đối tượng khi chuyển nó từ Java sang Jython
Ví dụ sao chép từ một Jython-console:
>>> b = java.lang.Boolean("True");
>>> type(b)
<type 'javainstance'>
>>> isinstance(b, java.lang.Boolean);
1
Cho đến nay, mọi thứ đều tốt nhưng nếu tôi đưa các đối tượng trong một ArrayList
>>> l = java.util.ArrayList();
>>> l.add(b)
1
>>> type(l.get(0))
<type 'int'>
đối tượng được chuyển đổi thành một con trăn giống boolean (tức là an int) và ...
>>> isinstance(l.get(0), java.lang.Boolean)
0
có nghĩa là tôi không thể thấy rằng điều này đã từng là aj ava.lang.Boolean.
Làm rõ
Tôi đoán những gì thực sự muốn đạt được là để thoát khỏi sự chuyển đổi ngầm từ Java-loại để Python-loại khi vượt qua các đối tượng từ Java để Python. Tôi sẽ đưa ra một ví dụ khác để làm rõ.
Một Python module:
import java
import IPythonModule
class PythonModule(IPythonModule):
def method(self, data):
print type(data);
Và một Java-Class sử dụng mô-đun này:
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"));
}
}
Ở đây tôi sẽ thấy đầu ra 'bool' vì sự chuyển đổi ngầm, nhưng những gì tôi thực sự muốn là xem 'javainstance' hoặc 'java.lang.Boolean'. Nếu bạn muốn chạy mã này, bạn cũng sẽ cần lớp JythonFactory có thể được tìm thấy here.
Có Tôi đang sử dụng phiên bản ổn định mới nhất, 2.2.1 không hỗ trợ loại bool trăn ... Tải xuống 2.5b ngay bây giờ ... –
>>> b = java.lang.Boolean ("true "); >>> l = java.util.ArrayList(); >>> l.add (b) True >>> type (l.có được (0)) >>> isinstance (l.get (0), java.lang.Boolean) False Theo như tôi thấy, chuyển đổi vẫn diễn ra, và nó là chuyển đổi này mà tôi don không muốn. –
Thực sự có 2 chuyển đổi tiềm năng xảy ra ở đây, một chuyển đổi thành mảng và một sắp ra mắt. Khi nó nằm trong ArrayList, bạn đã có một java.lang.Boolean, bạn có thể thấy nó vì nó in bằng chữ thường 't'. –