这是个关于擦除边界的问题,如果是 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();
}
}
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();
}
}
同意, 如果不定义 extends HasF, 那么obj怎么会f()这个接口呀!