这是个关于擦除边界的问题,如果是 List<T> 那么擦除后就是 List,但如果 List<T extends X>,设置它的边界后,那么这下擦除后会是什么呢? List<T> ? List<X> ?
public class HasF {
  public void f() { System.out.println("HasF.f()"); }
}class Manipulator<T> {  //这样会出错,但是如果class Manipulator<T extends HasF>这样就不会出错
  private T obj;
  public Manipulator(T x) { obj = x; }
  public void manipulate() { obj.f(); }
}public class Manipulation {
  public static void main(String[] args) {
    HasF hf = new HasF();
    Manipulator<HasF> manipulator =
      new Manipulator<HasF>(hf);
    manipulator.manipulate();
  }
}