1

例---SQLの場合と同様に、SQLステートメントをStringとして記述し、実行します。

strsql = "Select * from international_table ";

今、私たちが行うことは、このステートメントを同様に実行します

JavaまたはC#で欲しい

このような

strjavacode = "String str = \" Masdfksdja \";System.out.Println(str); "

その後、これを実行する方法

変数を宣言したり、値やステートメントを何度も割り当てたりする必要がない、このようなことをしたいと思っています。

4

3 に答える 3

6

はい、JavascriptやPHPなど、これが可能な言語があります。これらの言語にはeval()、任意の文字列をコードとして実行できる関数があります。

ただし、この例は、ほとんどすべての言語での機能の不必要な悪用と見なされます。これは、String s1までの個別の変数String s10を使用する代わりに、配列を使用して、インデックスを介してアクセス可能な一連の値を表す必要があるためです。それがアレイの目的です。

Java(C#、C ++、その他の多くの言語など)にはこの機能がありません。コードはその場でコンパイルできますが、クラスの一部である必要があり、非常に複雑なプロセスです。

于 2012-04-16T12:50:45.360 に答える
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();
 }
于 2012-04-16T12:58:49.540 に答える
1

あなたが望むものに依存します。実行後にs1とs100をさらに使用できるようにしたい場合、これはまったく不可能です。また、非グローバル変数にアクセスできる任意のコードを作成することもできません。

できることは、インターフェイスを実装するクラスを作成し、実行時にそのクラスをコンパイルすることです。次に、リフレクションを使用して、この新しいクラスのインスタンスをインスタンス化できます。インターフェイスが適切なメソッドを提供している場合は、実行前、実行中、実行後にこのオブジェクトをクエリできます。リフレクションを使用して、オブジェクトのフィールドにアクセスすることもできます。

しかし、これはすべて非常にハッキーであり、Javaが適していない方法で物事を成し遂げようとしています。100個の任意の文字列を作成したいだけの場合は、配列を使用して独自の小さなDSLを作成し、単純なタスクを実行することをお勧めします。

最後に試してみたい方法の1つは、JythonやGroovyなどのJVMで実行されるスクリプト言語を使用することです。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);
        }
    }

}

このために、say String s1 = "hello";String s2 = "world";およびの引数を入力することができますString combined = s1 + " " + s2;

于 2012-04-16T13:07:43.240 に答える