Javaのクラス名を文字列から定義したい
Javaのクラス名を、与えられた文字列から定義しようとしています。
そこで、Rやpythonなどのeval関数のように、文字列をコードとして評価すればよい、と考えました。
しかし、Javaは標準で文字列を評価しないということなので、どうしてもevalのような機能を使いたい場合は、次のようにjsを呼ぶ必要があるそうです。 Yahoo 知恵袋より
import javax.script.*;
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.eval("println('Hello Script API');" + "var a,b,c; a=1.23;b=3.45;c=a*b;" + "println('a*b='+c);");
ここで、評価式の中に変数定義を入れ、後のコードで定義した変数を使いたいと思っています。
次のようなものです。
engine.eval("int x = 8;");
y = x*x;
System.out.println("" + y);
なぜこのようなことをしたいのかというと、次のようにまとめて書いてしまいたいクラス群があるからです。
classNames = {"Class1", "Class2", "Class3"};
for (int i = 0; i < classNames.length; i++){
engine.eval(classNames[i] + " class = new " + class + "();");)
System.out.println(class.getClass().getName());
}
しかし、この方法では、コンパイル時はclassが未定義であるため、コンパイルエラーとなってしまいます。
コンパイルエラーを回避しつつevalを行うようなことは可能でしょうか?
上のようなループは、switch文を用いても可能なのですが、コードが冗長かつ長くなって見ずらいので、それ以外の方法で可能であればご教授願います。