0

次の例のように、クラスを渡し、そのクラスを戻り値の型として宣言することで、メソッドの戻り値の型を動的に決定できることを知っています。

public static <returnType> returnClass dynamicConstructor (Class<returnType> returnClass){
    //Dynamically construct an object using a zero parameter constructor
    return (returnClass) object;
}

呼び出されるコードは次のとおりです。

DynamicConstructor.construct(constructedClass);

このコードは、コードでメソッドを呼び出すときに、単純でカプセル化されているため、優れています。ただし、さらに一歩進んで、パラメーターを完全なクラス名を含む文字列にしてから、 を介してメソッドにオブジェクトのタイプを決定させたいと思いますClass.forName(className)。これに関する問題は、後で決定された型を返す方法がわからないことです。メソッドのオーバーロードを使用して、私が持っているコードは次のとおりです。

public static ?????? dynamicConstructor (String className){
    try {
        return dynamicConstructor(Class.forName(className));
    } catch (ClassNotFoundException e) {
        System.out.println("Could not find class at path " + classPath);
        e.printStackTrace();
        return null;
    }
}

問題は、 というラベルの付いた部分に何を入れればよいかわからないこと??????です。で決まるクラスを何とか参照できるようにしたいClass.forName(className)。これは可能ですか?

4

1 に答える 1

0

クラス名からクラスのインスタンスを作成することは確かに可能ですが (引数のないコンストラクターがある限り)、クラス名が格納されている唯一の場所が String である場合、型を判別する方法はありません。戻る。したがって、メソッドの署名は次のようになります

public static Object dynamicConstructor(String)

これはおそらくあまり役​​に立たないか、あなたが望むものではありません。

簡単に言えば、いいえ、これは不可能です。

于 2013-03-10T20:41:45.143 に答える