2

使用するクラス タイプを示すフラグがあります。適切なクラスを取得するには、静的メソッドを使用する必要があります。クラス型は、ジェネリック メソッドの入力として必要です。

public class Config{
    public static int flag = 1;
}

public interface A {
    public abstract int getResult();
}

public class A1 implements A{
    public int getResult{
    // ...
    }
}

public class A2 implements A{
    public int getResult{
    // ...
    }
}

public class AType{

    public static Class getType(){
        switch (Config.flag) {
    case 1:
        return A1.class;
    case 2:
        return A2.class;
        default:
            return null;
    }
}

「getType()」の戻り値の型が間違っています。私はすでにいくつかの一般的な戻り値の型を試しましたが、クラス型を取得してさらに使用するのはうまくいかないようです...

構成フラグに応じて異なるクラス タイプを返す方法はありますか?

次のようなジェネリック メソッドの入力として、クラス タイプ (A1 または A2) が必要です。

public static <T extends Message> T[] getArrayFromStream(DataInputStream in, Class<T> returnType)
        throws IOException {
    return getArrayFromStream(in, returnType, new Object[0]);
}
4

1 に答える 1

4

私の推測では(情報が不足しているため)、あなたはこれをやろうとしているのです:

Class clazz = getType();
A instance = clazz.newInstance();

そんなときはこれが必要…

public Class<? extends A> getType(){...}

その後

Class<? extends A> clazz = getType();
A instance = clazz.newInstance();
于 2012-10-16T12:18:57.740 に答える