0

Java を使用して新しいクラスを動的に作成したいと考えています。1、2、3 のラベルが付いた 3 つのボタンがあります。コードは次のようになります。

switch (button.getActionCommand()) {
  case 1:
    return new Listener1();
    break;
  case 2:
    return new Listener2();
    break;
  case 3;
    return new Listener3();
    break;
}

動作しますが、短くしたいと思います。すべての新しいクラスは、最後の番号のみが以前のクラスとは異なります。したがって、次のようにクラスを動的に作成することは可能ですか?

return new Listener()+button.getActionListener();

私はそれが可能だと確信していますが、どうやって?Proxy クラスのいずれかを使用する必要がありますか、またはこれを実現する簡単な方法はありますか?

4

4 に答える 4

2

Javaの場合、次のようなことができます。

String className = "package.Listener" + button.getActionCommand();
Class theClass = Class.forName(className);
Object theListener = the.newInstance();
return (Listener) theListener;
于 2013-01-15T15:31:34.233 に答える
2

Provided this is Java, you could use reflection if you really wanted that...

return Class.forName("packageName.Listener"+theNumber).newInstance();

Of course, doing so might have adverse effects too - performance hit, ugly code, debugging and readability issues, having to deal with handling multiple kinds of exceptions...

Recommended reading:

于 2013-01-15T15:29:42.997 に答える
2

言語を指定しなかったので、1 つの方法を次に示します。

const_get("Listener#{button.action_command}").new

ただし、このためにクラスを動的に作成する必要がある理由がわかりません。私が理解していることから、ListenerNクラスは既に存在し、それらを動的にインスタンス化したいだけですか?

クラスを動的に作成する必要がある場合でも、それは問題ではありません。

const_set("Listener#{button.action_command}", Class.new)
于 2013-01-15T15:30:24.753 に答える