1

私はこれらのクラスを持っています:

public class A <T>{
}

public interface I {    
}

public class X implements I {
}

public class B extends A<X>{
}

私のコードでは、それを行うとエラーが発生します:

A<I> myobj = (A<I>) new B();

それは違いない:

A<X> myobj = (A<X>) new B();

しかし、私がやれば大丈夫でうまくいきます:

A<I> myobj = null;
myobj  = (A<I>) Class.forName("B").newInstance();

この最後のケースでは、B のすべてのメソッドにアクセスし、非常にうまく動作します。

特にクラスではなく、ジェネリック obj のインターフェイスのみを保証するため、myobj を A として宣言する必要があります。

私の最初のケースが機能しない理由を知っている人はいますか?

最もエレガントであるため、最初のものを実装したいと思います。

4

1 に答える 1