- 泛型
泛型:其实就是参数化类型
泛型:在运行时是object
泛型参数:不能是基本类型 (int) ,只能是Integer等包装类型或对象
类型推导:参数,返回值(方法中没有传入的泛型参数,根据返回值给定的类型定义)
编译时已经知道泛型的类型
有泛型参数的 和 没有泛型参数的 可以互相转换
举例:Pair<T, T>与它的原始类型Pair之间存在”is-a”关系,Pair<T, T>在任何情况下都可以转换为Pair类型
- 泛型函数
? Super Number ?是父类
? Extends Number ? 是子类
?:声明我是个泛型
public static<T> T empty()
<T> 声明泛型函数,是形参,函数中用到的所有泛型符号都要在其中声明
- 类型擦除
? :擦除为Object
? Extend T :擦除为T
- 泛型用途
泛型方法(函数声明,泛型参数)
泛型类/接口
泛型变量
简单实例
- 传入长度,返回指定类型的数组
<T> T[] toArray(int length, Generic<T> generic) {
return generic.returnArray(length);
}
@Test
void should_return_array() {
String[] stringArray = toArray(5, (length) -> new String[length]);
assertEquals(5, stringArray.length);
assertEquals(stringArray.getClass().getComponentType(), String.class);
}
interface Generic<T> {
T[] returnArray(int length);
}
网友评论