Mi piacerebbe chiedere informazioni sulle regole di cancellazione del tipo java.Java generics type erasure
Se abbiamo classi:
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
}
}
Si può spiegare il motivo per cui mi chiama setX() metodo provoca problemi di compilazione?
'? la forma eccellente funzionerebbe là. "Producer Extends, Consumer Super" –
@MichaelMyers: Au contraire: http://ideone.com/TYr10C. 'Base super Shape> 'accetta una' Base' di qualsiasi * supertipo * di 'Shape'. –