Executar uma String

Gostaria de saber se em java eu posso executar uma
String em tempo de execução.


public class ExecutarString {

      public ExecutarString(){
      }

      public static void main(String args[]){
      
            String comandoJava = null;
            String cor = null;

            if(cor.equals("amarelo")){
                  comandoJava = "System.out.println("amarelo");";
            }

            // classe ou metodo que execute esta String
            executarString(comandoJava);

      }

}

Vitor Hugo Brito de Oliveira

Não, em Java isto não é possível fazer… Java é uma linguagem compilada, e só se executa código compilado em bytecode…

Para isto tens q usar uma linguagem de Script… como Jython ou LuaJava…

http://www.jython.org

http://www.keplerproject.org/luajava/

Existe muitas outras, mas na minha opinião estas duas são as melhores.

Mas nem em tempo de execução isto é possivel com
a classe Class ou Method, que foi uma das alternativas
que eu estava procurando.

Meu caro to dizendo que não… muito menos em tempo de execução… tens q estudar como o java runtime funciona, se não vai ficar dificil vc entender… mas vou tentar…

Há única maneira é vc gerar um arquivo .java com o código, e depois chamar a class com.sun.tools.javac.Main.compile que é o compilador Java em runtime, que tem dentro do teu SDK em lib/tools.jar

E depois iniciar o arquivo .class gerado pelo compilador via reflection, mas isto vc só vai poder fazer uma única vez, por q o java não carrega a mesma class mais que uma vez em runtime…

Para forçar o reload de uma class, tens q criar um classloader que não é nada fácil, e boa sorte se quiser ir por este caminho…

E nesta solução vc tem q ter o código de uma class completa e não apenas uma linha de código, ou seja tens q gerar um .java normal…

Fora isto, só via linguagens de Script que é muito mais simples e fácil, e é por isso que elas existem, saka?

Tens que compreender uma coisa…

Todas as linguagens que são compiladas em código nativo ou em bytecode, não executam strings, justamente por que não são interpretadas e sim executadas diretamente, como Java, C#, C++, C, Delphi, VB, e por ai fora…

As únicas linguagens que suportam execução de códigos delas mesmas, são as linguagens que são interpretadas, ou seja que não são compiladas, linguagens de Script, como PHP, JavaScript, ShellScript, Lua, Phyton, Ruby, etc…

Dois tipos então são as Linguagens Compiladas e as Interpretadas…

Compiladas são mais rápidas, para aplicações de grande porte e cruciais, exigem maior conhecimento técnico para se desenvolver, mas teem uma maior performance justamente por que são feitas para serem executadas diretamente pelo computador…

Interpretadas são mais lentas(justamente por que tem q se interpretar linha a linha…), apliações de medio e pequeno porte, memos conhecimento técnico justamente por que não interessa como o processador/computador funciona, e sim o interpretador, sendo feitas para facilitar, ou seja para mastigar água, assim a linguagem pode ser de qualquer jeito, por que depois o interpretador faz o trabalho sujo para que funcione, mas claro isto consome muito desempenho…

Java não é bem uma linguagem compilada, pois precisa de uma Virtual Machine, mas a Virtual Machine é como se fosse o computador diretamente, e assim não precisamos nos preocupar em que computador ou OS vai ser executado, pois a Virtual Machine faz a ponte…

Deu pra entender mais ou menos??? :roll:

claro tem sempre gambiarras que vc pode fazer:
o BeanShell pode fazer o que vc quer, interpretando o codigo, o groovy gera bytecode (ou seja, classes) em tempo de execucao e os carrega, etc…
entao, de uma olhada nesses dois

Ou então espera a versão 1.6 que vai trazer uma api de script. :smiley: