JAVA泛型概念的理解
什么是泛型?
泛型是JAVA语言中一种增强类型安全性的机制,它允许程序员在类,接口和方法中使用类型参数,以便在编译时进行类型检查,并在运行时生成正确的代码。泛型的主要目的是提高代码的可重用性和可读性,同时减少类型转换的错误。
泛型和Object类型的区别
泛型和Object类型的主要区别在于类型安全性、代码重用性和可读性,以及在编译时和运行时的行为。
1. 类型安全性:泛型提供了编译时类型检查,可以在编译阶段捕获类型错误,提高程序的安全性。使用泛型,可以在编译时指定操作的对象类型,并在编译器强制类型检查。而使用Object,则会失去编译器对类型的检查,需要在运行时进行类型转换,并存在类型转换错误的风险。
2. 代码重用性和可读性:通过使用泛型,可以编写通用的代码,可以在不同类型之间重用,提高代码的可维护性和可读性。而如果直接使用Object,需要手动进行类型转换,代码可读性和重用性会相对较差。使用泛型可以避免在操作对象时进行强制类型转换,提高代码的简洁性和可维护性。
3. 运行时行为:Object本身是一个所有类的父类,可以强制类型转换,但可能会存在类型不匹配的问题。泛型在虚拟机中会被擦除掉具体类型信息,因为泛型是在编译时进行类型检查的,所以不会出现类型不匹配的问题。
泛型插除
泛型信息只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉。
例子:方法重载
public void test(List<Integer> list){
}
public void test(List<String> list){
}
上述编译不会通过,我们都知道在同一个类中方法名相同,参数列表不同(参数类型,参数个数)才称作为重载,上述两方法是方法名相同,参数个数相同,如果能编译通过,说明上述参数类型是不同的,但实际是编译不会通过,编译的时候会将泛型直接擦除,属于同一个方法。