Je me demande si possible pas jython automagicaly transformer des objets java en types python lorsque vous les mettez dans une Java ArrayList.Préserver le Java-type d'un objet lors du passage de Java à Jython
Exemple copié à partir d'un Jython console:
>>> b = java.lang.Boolean("True");
>>> type(b)
<type 'javainstance'>
>>> isinstance(b, java.lang.Boolean);
1
Jusqu'à présent, tout va bien, mais si je mets l'objet dans un ArrayList
>>> l = java.util.ArrayList();
>>> l.add(b)
1
>>> type(l.get(0))
<type 'int'>
l'objet se transforme en un comme python booléen (ie un int) et ...
>>> isinstance(l.get(0), java.lang.Boolean)
0
ce qui signifie que je ne vois plus que c'était une fois aj ava.lang.Boolean.
Précision
Je suppose que ce que voulez vraiment atteindre est de se débarrasser de la conversion implicite de Java-types de Python-types lorsque des objets passant de Java à Python. Je vais donner un autre exemple de clarification.
Un module Python:
import java
import IPythonModule
class PythonModule(IPythonModule):
def method(self, data):
print type(data);
Et Java classe qui utilise ce module:
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"));
}
}
Ici, je vais voir la sortie 'bool' en raison de la conversion implicite, mais ce que je aimerait vraiment voir 'javainstance' ou 'java.lang.Boolean'. Si vous voulez exécuter ce code, vous aurez également besoin de la classe JythonFactory qui peut être trouvée here.
Oui J'utilise la dernière version stable, 2.2.1 qui ne supporte pas le type python bool ... Téléchargement 2.5b maintenant ... –
>>> b = java.lang.Boolean ("true "); >>> l = java.util.ArrayList(); >>> l.add (b) Vrai >>> type (l.obtenir (0)) >>> isinstance (l.get (0), java.lang.Boolean) Faux Pour autant que je peux voir, la conversion a toujours lieu, et il est cette conversion que je don Je ne veux pas. –
Il y a en fait 2 conversions potentielles qui se produisent ici, une qui entre dans le tableau et une qui sort. Quand il est dans ArrayList, vous avez un java.lang.Boolean, que vous pouvez voir car il imprime avec un 't' minuscule. –