专业软件网站建设,注册公司流程图片,网络销售入门基本知识,进入百度公司很难吗所谓擦拭法是指#xff0c;虚拟机对泛型其实一无所知#xff0c;所有的工作都是编译器做的。 例如#xff0c;我们编写了一个泛型类Pair#xff0c;这是编译器看到的代码#xff1a;
public class PairT {private T first;private T last;public Pair(T first, T…所谓擦拭法是指虚拟机对泛型其实一无所知所有的工作都是编译器做的。 例如我们编写了一个泛型类Pair这是编译器看到的代码
public class PairT {private T first;private T last;public Pair(T first, T last) {this.first first;this.last last;}public T getFirst() {return first;}public T getLast() {return last;}
}而虚拟机根本不知道泛型。这是虚拟机执行的代码
public class Pair {private Object first;private Object last;public Pair(Object first, Object last) {this.first first;this.last last;}public Object getFirst() {return first;}public Object getLast() {return last;}
}因此Java使用擦拭法实现泛型导致了
编译器把类型视为Object编译器根据实现安全的强制转型。
使用泛型的时候我们编写的代码也是编译器看到的代码
PairString p new Pair(Hello, world);
String first p.getFirst();
String last p.getLast();而虚拟机执行的代码并没有泛型
Pair p new Pair(Hello, world);
String first (String) p.getFirst();
String last (String) p.getLast();所以Java的泛型是由编译器在编译时实行的编译器内部永远把所有类型T视为Object处理但是在需要转型的时候编译器会根据T的类型自动为我们实行安全地强制转型。