私はこれらのクラスを持っています:
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 として宣言する必要があります。
私の最初のケースが機能しない理由を知っている人はいますか?
最もエレガントであるため、最初のものを実装したいと思います。