1

したがって、抽象クラスを拡張するジェネリックを使用するクラスを作成しようとしています。元。

public abstract class Template<C extends Abstract>

ただし、クラス内でこの「C」をインスタンス化する必要があります。私はこれを行うことができるかもしれないと考えました:

C s = (C) ((C)new Object()).getClass().getConstructor(Known.class,AnotherKnown.class).newInstance(objectOfKnownType,objectOfAnotherKnownType);

したがって、私の質問は基本的にこれが可能かどうかです。私はのように感じます

((C) new Object()).getClass()

私にいくつかの問題を与えるかもしれません。

次のように変更した場合:

C a;
C s = (C) (a.getClass().getConstructor( ... ).newInstance( ... ));
4

1 に答える 1

5
(C) new Object()

は有効ではなく、は ではないClassCastExceptionため、後でが返される可能性があります。ObjectC

ジェネリックが実装される方法Templateは、それがインスタンス化された方法を知らないことを意味Cし、オブジェクトを取るメソッドまたはコンストラクターを作成する必要がありClassます。

public abstract class Template<C extends Abstract>
{
    private Class<C> classOfC;

    public Template( Class<C> clazz ) {
        classOfC = clazz;
    }
}
于 2012-06-03T23:29:10.207 に答える