1. 泛型
泛型是JDK5中引入的特性,它把运行期间的问题提前到了编译期间,避免了强制类型转换
2. 泛型格式
<类型>
按照变量规则书写即可 如: <E>
<T>
<类型1,类型2...>
多个泛型格式,多个泛型之间用逗号隔开 如:<E,T,Q>
如果该泛型未接收到指定类型,则默认为object类型
3. 泛型可以使用在
类后面 泛型类
public static class f<e> {
int a;
}
public static void main(String[] args) {
f<Integer> fa = new f<>(); // 在类后面加上<> 指定泛型 new出来的类只能使用指定类型对象,否则会出现编译时问题(泛型把运行时问题提前到编译时)
}
- 方法申明上 泛型方法
方法定义一个泛型 在返回值前面加上泛型public <E> e getA(e E) {
return E;
}
- 接口后面 泛型接口
在接口名后面定义泛型public interface in<e>{
e show(e E);
}
类实现
// 实现类不给指定类型 此类也需要成为泛型类
public class fa1<e> implements in<e>{
@Override
public e show(e E) {
return null;
}
}
// 实现类给予指定数据类型
public class fa2 implements in<Integer>{
@Override
public Integer show(Integer E) {
return null;
}
}
4. 使用泛型方法
public static void main(String[] args) {
ArrayList<String> list =new ArrayList<>();
list.add("对对对");
list.add("对对对2");
list.add("对对对3");
String[] strings = list.toArray(list.toArray(new String[0])); // 需要传一个泛型指定的类型对象
System.out.println(Arrays.toString(strings));
}
5. 类型通配符
<?>
可以匹配任何类型
ArrayList<?>
:可以匹配任何类型,但是ArrayList不能添加元素,获取出来的也是父类类型
public static void method1(ArrayList<?> list){}
5.1. 类型通配符上限
<? extends 类型>
ArrayList<? extends Number>
:表示它的类型是Number或其他子类
public static void method2(ArrayList<? extends Number> list){}
5.2. 类型通配符下限
<? super 类型>
ArrayList<? super Number>
:表示它的类型是Nuber或Number父类
public static void method3(ArrayList<? super Number> list){}