如何理解泛型?
泛型是一种"代码模板".可以用一套代码套用各种类型。
作用
通过泛型的语法定义,约束集合元素的类型,编译器可以在编译期提供一定的类型安全检查,避免运行时才暴露bug。
l 代码通用性更强,后面有案例
l 泛型可以提升程序代码的可读性,但它只是一个语法糖(编译后这样的东西就被删除,不出现在最终的源代码中),对于JVM运行时的性能是没有任何影响的。
泛型声明
泛型可以在接口、方法、返回值上使用:
java.util.List泛型接口/类:
public interface Collection<E> {}
public class TestC <QQ> {}
常用名称
l E - Element (在集合中使用,因为集合中存放的是元素)
l T - Type(Java 类)
l K - Key(键)
l V - Value(值)
l N - Number(数值类型)
l ? - 表示不确定的java类型
测试泛型代码:
//测试泛型的使用
public class Test1_Generic {
public static void main(String[] args) {
//数组
int[] a = new int[3];
a[0]=1;
// a[1]="jack";//泛型,想要完成和数组一样,具体数据校验的功能
//泛型好处2:可以用<>标志泛型,<>里面,可以指定元素的类型,来约束数据的类型
//<String> 就会检查集合中,元素的类型,如果添加的数据,类型不匹配,会在编译时期报错而不是运行了才报错
List<String> list = new ArrayList();
// List list = new ArrayList();//3,可以添加任何类型的数据,但是运行时期会报错
// list.add(100);
list.add("jack");
// list.add(9.9);
for (Object o : list) {
//泛型的好处1:把运行时期的错误提前到了编译时期
//java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
String s = (String) o;
System.out.println(s);
}
}