J'ai un morceau de code Java dans une chaîne.
String javaCode = "if(polishScreenHeight >= 200 && " +
"polishScreenHeight <= 235 && polishScreenWidth >= 220) { }";
Est-il possible de convertir cette chaîne Java en une instruction Java et de l'exécuter? Peut-être en utilisant la réflexion Java?
Comme cela a déjà été suggéré, vous pouvez compiler, enregistrer et exécuter du code à la volée à l'aide de l'API Compiler .
Une autre alternative intéressante consisterait à utiliser beanshell . Beanshell n'est plus activement développé, mais je peux en garantir la fiabilité, je l'ai utilisé avec succès dans plusieurs projets de production.
Utilisez BeanShell. Il y a une page sur comment l'utiliser depuis Java .
Beanshell (comme suggéré par Boris) est un moyen "d'exécuter" le code source Java. Mais il semble que vous souhaitiez "exécuter" des fragments pouvant interagir avec les classes compilées. Votre exemple contient des noms de variable.
La réflexion ne va certainement pas aider, car la réflexion cible les classes ("classfiles").
Vous pourriez essayer de définir une classe complète ("fichier source Java valide"), de la compiler et de la charger (chargeur de classe url). Ensuite, vous devriez pouvoir utiliser les méthodes de cette "classe générée en direct". Mais une fois qu'une classe est chargée, vous ne pouvez pas vous en débarrasser (décharger), donc cela ne fonctionnera qu'une fois (autant que je sache).
Une autre façon serait d'exécuter votre code en tant que code Groovy, voir this pour un exemple.
Autant que je sache, il n'y a pas de moyen simple de le faire.
Cependant, à partir de Java 6, vous pouvez pouvez compiler le code source pour des classes complètes à l'aide de javax.tools.Compiler. Les classes compilées peuvent ensuite être chargées et exécutées. Mais je ne pense pas que cela donnera ce que vous voulez.
vous pouvez utiliser ce code pour exécuter une méthode en utilisant ce code new Statement(Object target, String methodName, Object[] arguments).execute();
import Java.beans.Statement;
public class HelloWorld {
public void method_name(String name) {
System.out.println(name);
}
public static void main(String[] args) throws Exception {
HelloWorld h = new HelloWorld();
new Statement(h, "method_name", new Object[]{"Hello world"}).execute();
}
}
Ce n'est pas Java, mais comme pgras a déjà suggéré d'utiliser GrooyScript comme suit:
Binding binding = new Binding();
GroovyShell Shell = new GroovyShell(binding);
String[] strings = new String[]{"World", "Groovy"};
Shell.setVariable("args", strings);
String script = "return \"Hello \" + args[1]";
String value = (String) Shell.evaluate(script);
System.out.println(value); // Hello Groovy
Essayez l'API JavaCompiler .
Quelqu'un d'autre répondit mieux que moi de cette façon: cependant: Convertir une chaîne en code
Soyez prudent avant d'utiliser réellement quelque chose comme ça ...