あなたが望むものに依存します。実行後に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;
。