Java型消去ルールについてお聞きしたいと思います。私たちは、クラスがある場合Javaジェネリック型消去
は:
public class Shape{}
public class Circle extends Shape{}
public class Base<T extends Shape>{
T x;
public void setX(T t){}
}
public class MainClass(){
public static void main(String... _arg){
Base<? extends Shape> bs = new Base<Circle>();
bs.setX(new Circle()); // <- compilation problem
}
}
をSETX()メソッドを呼び出すと、コンパイルの問題を引き起こし、なぜあなたは私を説明していただけますか?
'?スーパーシェイプ 'がそこで動作します。 "プロデューサーはコンシューマースーパーを拡張する" –
@MichaelMyers:Au contraire:http://ideone.com/TYr10C。 'Base <? super Shape> 'は' Shape'の任意の*スーパータイプ*の 'Base'を受け取ります。 –