sábado, 23 de janeiro de 2010

Acessando variáveis do Java no Python

Podemos "enviar" os objetos do Java para o Python e através desse, podemos usar objetos Java como se fossem objetos do Python. Para isso, basicamente usamos o método "put" da interface javax.script.ScriptEngine. Nesse método, passamos o primeiro parâmetro o nome (java.lang.String) e o segundo parâmetro, passamos um objeto (java.lang.Object). Esse nome (primeiro parâmetro) será usado no python para acessar o objeto passado no segundo parâmetro.

Execute o exemplo abaixo:

--------------------------------------------------------------------------------------

import java.util.ArrayList;
import java.util.HashMap;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
*
*/
public class JavaToPython {

/**
* @param args Argumentos.
*/
public static void main(String[] args) {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("python");

if(scriptEngine != null) {
Object object[] = new Integer[3];
object[0] = new Integer(3);
object[1] = new Integer(4);
object[2] = new Integer(5);


scriptEngine.put("a", new Integer(3));
scriptEngine.put("b", new Double(3.45));
scriptEngine.put("c", new String("hello jython"));
scriptEngine.put("d", object);
scriptEngine.put("e", new ArrayList());
scriptEngine.put("f", new HashMap());

try {

scriptEngine.eval("print type(a), a");
scriptEngine.eval("print type(b), b");
scriptEngine.eval("print type(c), c");
scriptEngine.eval("print type(d), tuple(d)");
scriptEngine.eval("print type(e), list(e)");
scriptEngine.eval("print type(f), dict(f)");

} catch (ScriptException e) {
e.printStackTrace();
}
}
}
}

--------------------------------------------------------------------------------------

O objeto de nome "a" passado no método "put" é do tipo java.lang.Integer que no python equivale ao tipo "int".

O objeto de nome "b" passado no método "put" é do tipo java.lang.Double que no python equivale ao tipo "float".

O objeto de nome "c" passado no método "put" é do tipo java.lang.String que no python equivale ao tipo "unicode".

O objeto de nome "d" passado no método "put" é um array do tipo java.lang.Integer que no python equivale ao tipo "array.array". Mas no exemplo, podemos transformar o tipo "array.array" no tipo "tuple" que é um tipo mais usual no python.

O objeto de nome "e" passado no método "put" é do tipo java.util.ArrayList que no python equivale ao tipo "java.util.ArrayList". Mas no exemplo, podemos transformar o tipo "java.util.ArrayList" no tipo "list" que é um tipo mais usual no python.

O objeto de nome "f" passado no método "put" é do tipo java.util.HashMap que no python equivale ao tipo "java.util.HashMap". Mas no exemplo, podemos transformar o tipo "java.util.HashMap" no tipo "dict" que é um tipo mais usual no python.

Nenhum comentário:

Postar um comentário