3

args[]of内で、public static void main(String args[])実装するサブクラスを指定したいと思います。args[](a String) のパラメーターをクラス宣言に変換するにはどうすればよいですか?

たとえば、 if args[0]="Subclass1"の場合、以下のどこかで宣言する必要があります。
BaseClass b = new Subclass1()

これはJavaで可能ですか?

編集
これを一歩トリッキーにするために、これらのサブクラスは外部から来ています.jar。サブクラスを動的にインポートする方法はありますか、または事前にインポートする必要がありますか?

4

3 に答える 3

8

クラス名は、クラスへのフル パス、つまり [package].[classname] にする必要があります。次のように使用できます。Class.forName([class name]).newInstance();

于 2013-03-01T15:58:00.330 に答える
6
public static void main(String[] args) {
    if (args.length > 0) {
        // exceptions handling omitted
        Class<?> clazz = Class.forName(args[0]);
        // check before casting
        if (BaseClass.class.isAssignableFrom(clazz)) {
            BaseClass instance = (BaseClass) clazz.newInstance();
            // use
        }
    }
}

クラスへのフル パス、つまり だけでなく であるclassName必要があることに注意してください。Subclass1your.package.Subclass1

于 2013-03-01T15:59:01.360 に答える
2

メイン クラスがcom.acme.app.Mainで、サブクラスが である場合は、次のpublic static class Subclass1コード スニペットを使用します。

Class<?> cls = Class.forName("com.acme.app.Main$"+args[0]);
Object instance = cls.getConstructor().newInstance();

$内部クラスには、マークを介してアクセスします。

cls.getConstructor().newInstance()古い よりも の方が推奨されることに注意してくださいcls.newInstance()

内部クラスが特定のインターフェイスまたはクラスを実装または拡張していることがわかっている場合は、一般的なオブジェクトの代わりにClass<MyInterface>andを使用できます。MyInterface instance

于 2013-03-01T16:01:25.023 に答える