Me pregunto si es posible no tener jython automáticamente transformar objetos de Java a tipos de pitón cuando los pones en una Java ArrayList.Preservar el tipo de Java de un objeto al pasarlo de Java a Jython
Ejemplo copiado de un jython-consola:
>>> b = java.lang.Boolean("True");
>>> type(b)
<type 'javainstance'>
>>> isinstance(b, java.lang.Boolean);
1
Hasta ahora, todo está bien, pero si pongo el objeto en un ArrayList
>>> l = java.util.ArrayList();
>>> l.add(b)
1
>>> type(l.get(0))
<type 'int'>
el objeto se transforma en una serpiente pitón similar booleano (es decir, un int) y ...
>>> isinstance(l.get(0), java.lang.Boolean)
0
lo que significa que ya no puedo ver que esto era una vez aj ava.lang.Boolean.
Aclaración
Creo que lo que realmente quiere lograr es la de deshacerse de la conversión implícita de tipos de Java-a-Python tipos al pasar objetos de Java a Python. Daré otro ejemplo de aclaración. Módulo
una pitón:
import java
import IPythonModule
class PythonModule(IPythonModule):
def method(self, data):
print type(data);
Y un Java-clase que utiliza este módulo:
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"));
}
}
Aquí voy a ver la salida 'bool' debido a la conversión implícita, pero lo que realmente me gustaría es ver 'javainstance' o 'java.lang.Boolean'. Si desea ejecutar este código, también necesitará la clase JythonFactory que se puede encontrar en here.
Sí, estoy usando la última versión estable, 2.2.1 que no tiene soporte para el tipo de bool de pitón ... Descargando 2.5b en este momento ... –
>>> b = java.lang.Boolean ("true "); >>> l = java.util.ArrayList(); >>> l.add (b) verdadero >>> tipo (l.obtener (0)) >>> isinstance (l.get (0), java.lang.Boolean) Falso Por lo que yo puedo ver, la conversión tiene lugar todavía, y es esta conversión que Don no quiero –
En realidad, hay 2 conversiones potenciales que suceden aquí, una entrando en la matriz y otra saliendo. Cuando está en ArrayList, tiene un java.lang.Boolean, que puede ver porque se imprime con una 't' minúscula. –