泛型:
泛型在java基础中属于重要的一部分,掌握泛型是必要的。接下来以我的理解来解释一下
背景:编译器是先通过检查代码中泛型的类型 再进行类型擦除 再进行编译的
- 什么是泛型,
- 什么时候需要泛型,
- 泛型怎么用,
- 泛型注意的问题。
目前我接触的泛型应用就是集合使用泛型达到 一个集合里面只有一种类型的数据
泛型的好处:
1. 将运行时的异常提前至了编译时。
2. 避免了无谓的强制类型转换 。
泛型在集合中的常见应用:
ArrayList<String> list = new ArrayList<String>(); true 推荐使用。
ArrayList<Object> list = new ArrayList<String>(); false
ArrayList<String> list = new ArrayList<Object>(); false
//以下两种写法主要是为了兼顾新老系统的兼用性问题。
*
ArrayList<String> list = new ArrayList(); true
ArrayList list = new ArrayList<String>(); true
注意: 泛型没有多态的概念,左右两边的数据 类型必须 要一致,或者只是写一边的泛型类型。
推荐使用: 两边都写泛型。
具体集合是上面类型的 是看左边的泛型是什么
举个常见的例子:
集合:
ArrayList list = new ArrayList();
list.add("11");
list.add(3);
这个时候ArrayList集合中存储了多种类型,是不是看起来很不顺眼,日常应用中 我们想要的结果是 一个集合里面存储的类型是同一个。
如:
ArrayList<String> list = new ArrayList<String>();
list.add("11");
list.add(3);
//这个时候 集合list只能存放String类型的数据
//如果存储了其他的如 Integer类型之类的就会报错,是在编译前检查
泛型方法
public <T> T showKeyName(T a){//<T>是声明泛型方法
return a;
}
泛型类:
自定义泛型: 自定义泛型就是一个数据类型的占位符或者是一个数据类型的变量。
class Point< T>{ // 此处可以随便写标识符号,T是type的简称 一般都是T
private T var ; // var的类型由T指定,即:由外部指定
public T getVar(){ // 返回值的类型由外部决定
return var ;
}
public void setVar(T var){ // 设置的类型也由外部决定
this.v