最近看Java Language specification,看到第四章,感觉有很多东西自己以前都不曾注意,所以建议学Java的同学都看看,真的是查漏补缺。
下面说说Raw Type:
public TClass<E>{
public List<String> getString(){
return null;
}
public static void main(String args[]){
TClass tc = TClass();
List<TClass> list = tc.getString(); //1
}
}
1处就很奇怪了,为什么getString命名返回的是List<String>而将其赋值给List<TClass>类型都可以呢?这就是编译器对Raw type进行了处理,编译器将Raw type进行擦除,就是将其参数类型中的参数全部去掉,例如List<String>将擦除成List,所以tc.getString()返回的是List而不是List<String>。