java语言中的泛型不一样,在编译后的字节码文件中,就已经替换为原来的原生类型,并且在相应的地方插入了强制转型的代码,因此对于运行期的java语言来说,ArrayList<int>,ArrayList<string>就是同一个类,
所以泛型技术实际上是java语言的一颗语法糖。
package org.xiaofeiyang.classloader;
import java.util.List;
/**
* @author: yangchun
* @description:
* @date: Created in 2019-12-01 20:33
*/
public class GenericTypes {
public static String method(List<String> list){
System.out.println("invoke method (List<String>list)");
return "";
}
public static int method(List<Integer> list){
System.out.println("invoke method (List<Integer>list)");
return 1;
}
}
这段代码编译器检查通不过,因为List<String>,List<Integer>都会编译成List<E>,由此可见擦除法实现泛型弊端比较多。
自动装箱、自动拆箱和遍历循环
条件编译
编译器并非一个个地编译文件,而是将所有编译单元的语法树顶级节点输入到待处理列表后再进行编译,因此各个文件之间能够互相提供符号信息无须使用预处理器。