泛型概念
- 本质是参数化类型,把类型作为参数传递。
- 常见形式有泛型类、泛型接口、泛型方法。
- 语法 T成为类型占位符,表示一种引用类型,可以写多个逗号隔开。
- 好处 1. 提高代码重用性 2. 防止类型转换异常,提高代码安全性。
- 最近介绍泛型集合。
泛型类
代码语言:javascript复制// 写一个泛型类。
public class MyGeneric<T>{
//使用泛型T。
//1 创建变量。
T t;
//2 泛型作为方法的参数。
public void show(T t){
sout(t);
}
//3 泛型作为方法的返回值。
public T getT(){
return t;
}
}
使用操作
代码语言:javascript复制// 使用泛型类
public class TestGeneric{
public static void main(String[] args){
//使用泛型类创建对象
// 注意: 1. 泛型只能使用引用类型
// 2. 不用泛型类型对象之间不能相互赋值
MyGeneric<String> myGeneric = new MyGeneric<String>();
myGeneric.t = "hello";
myGeneric.show("hello world!");
String string = myGeneric.getT();
MyGeneric<Integer> myGeneric2 = new MyGeneric<Integer>();
myGeneric2.t = 100;
myGeneric2.show(200);
Integer integer = myGeneric2.getT();
}
}
泛型接口
语法:接口名,如下所示。
注意:不能泛型静态常量。
代码语言:javascript复制public interface MyGeneric<T>{
String a = "son"; //接口的内容,可以申明静态常量,默认public static final属性。
T t; //错误的!!!!!不可以泛型静态常量。
T sort(T t); //允许使用泛型方法,下文有介绍。
}
1,实现类
三个实现方式
代码语言:javascript复制public class impl implements MyGeneric<T>{}
或者
代码语言:javascript复制public class impl implements MyGeneric<String>{
String sort(String t){};
} //直接定义泛型的类型,但是泛型声明也需要改。
或者
代码语言:javascript复制public class impl<T> implements MyGeneric<T>{
}
泛型方法
语法: <T>返回值类型
代码语言:javascript复制public class MyGenericMethod{
//泛型方法
public <T> T show(T t){
sout("泛型方法" t);
return t;
}
}
//调用
MyGenericMethod myGenericMethod = new MyGenericMethod();
myGenericMethod.show("字符串");// 自动类型为字符串
myGenericMethod.show(200);// integer类型
myGenericMethod.show(3.14);// double类型
后续需要补充。
泛型集合
概念:参数化类型、类型安全的集合,强制集合元素的类型必须一致
特点:
- 编译时即可检查,而非运行时抛出异常
- 访问时,不必类型转换(拆箱)
- 不同泛型之间应用不能相互赋值,泛型不存在多态
比如LinkedList类底层方法是
代码语言:javascript复制public class LinkEdList<E> {}
所以使用泛型集合就是
代码语言:javascript复制List<String> list = new LinkedList<String>();