实施例--- 与SQL一样,我们将SQL语句编写为String,然后执行
strsql = "Select * from international_table ";
现在我们执行此语句 同样
我想要java或c#
像这样strjavacode = "String str = \" Masdfksdja \";System.out.Println(str); "
之后会有一些如何执行此
我渴望做这样的事情,我不必声明变量和赋值 或多次声明。
答案 0 :(得分:6)
是的,有些语言可以使用,例如Javascript和PHP,它们具有eval()
功能,允许您将任意字符串作为代码运行。
但是,您的示例将被视为几乎任何语言都不必要地滥用该功能,因为您应该使用数组代表一堆数据String s1
而不是String s10
。通过索引可访问的值。这就是阵列的用途。
Java(如C#,C ++和许多其他语言)没有此功能。你可以动态编译代码,但它必须是一个类的一部分,这是一个非常复杂的过程。
答案 1 :(得分:4)
你认为你可能需要eval但是在Java中你也可以实现命令模式。这不会让你执行仲裁代码。
interface Command {
void execute();
}
class StringOutputCommand implements Command {
private final int value;
public StringOutpuCommand(final int newValue) {
this.value = newValue;
}
void execute() {
// do something with value
System.out.println(value);
}
}
// then elsewhere you could have a bunch of these command objects
List<Command> commands = new ArrayList<Command>();
for (int i = 0; i < 10; i++) {
commands.add(new StringOutputCommand(i));
}
// which you could execute like this ...
for (Command command : commands) {
command.execute();
}
答案 2 :(得分:1)
取决于你想要的。如果在执行之后你想让s1和s100可供进一步使用,那么这是不可能的。也不可能编写可以访问任何非全局变量的任意代码。
您可以做的是编写一个实现接口的类,并在运行时编译该类。然后,您可以使用反射实例化此新类的实例。如果接口提供了适当的方法,则可以在执行之前,期间和之后查询此对象。您也可以使用反射来访问对象的字段。
这一切都非常hacky,并尝试以Java不适合的方式完成任务。如果你只想创建100个任意字符串,那么最好使用一个数组并创建自己的小型DSL来完成简单的任务。
您可能希望尝试的最后一种方法是使用在JVM上运行的脚本语言,例如Jython或Groovy。 Groovy非常适合这一点。由于Groovy是Java的超集,因此您不必担心有效的Java不能编译。虽然可能引起关注的是无效的Java可能会编译。例如String s = 'some string'
是有效的Groovy,但不是有效的Java。
使用Groovy可以执行以下操作:
import groovy.lang.GroovyShell;
public class SomeClass {
public static void main(String[] args) {
GroovyShell shell = new GroovyShell();
for (String arg : args) {
Object result = shell.evaluate(arg);
System.out.println("result is: "+result);
}
}
}
为此,您可以输入说明String s1 = "hello";
,String s2 = "world";
和String combined = s1 + " " + s2;
的参数。