泛型概述
泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。
这个意义就同ArrayList中可以存不同类型的的对象。
泛型提供一个类型参数(type parameters)
ArrayList<String> files = new ArrayList<String>();
尖括号之中的是这个List中的类型 一看就知道这是String的对象
泛型可以定义一个类 一个方法 一个接口
泛型的有效阶段是在编译阶段 运行阶段之后会去泛型的措施
两个同样的List装不同的类型 在运行时 是同一种对象类型
泛型类
一个例子
public class pair<T>
{
private T first;
private T second;
private Pair(){first=null; second=null}
private Pair(T first,T second){this.first;this.second=second}
}
用尖括号引起来的就是一种变量类型T,放在类名之后
E表示集合的元素类型, K V表示表的键与值 ,T或U S表示任意类型
定义泛型类 不一定要传入实参 如果不传入泛型类型实参的话 在泛型类中使用泛型方法或成员变量定义的类型可以为任何类型
泛型接口
泛型接口格式
//接口
public interface Generator<T>{
public T next();
}
//实现类
class apple<T> implements Generator<T>{
@Override
public T next(){
return;
}
}
实现类中想用什么类型的参数就把T替换成这个类型.
泛型方法
泛型方法格式
class ArrayAlg{
public static <T> T getMiddle(T...a){
return ;
}
}
//调用一个泛型方法时,在方法名前的尖括号中放入具体的类型 <String> 可以省略
String middle = ArrayAlg.<String>getMiddle("A","B","C");
类型变量的限定
有时需要对类型的变量加以约束
<T extends BoundingType> 说明T是应该被限制的类型
T可以是类或接口 限制的是T是子类或者实现接口的类
<T extends BoundingType & serializable> 用来限制多个限定
核心技术的例子
public class PairTest{
public static void main(String[] args){
LocalDate[] birthday={
LocalDate.of(1906,12,9);
LocalDate.of(1902,12,9);
LocalDate.of(1901,12,9);
};
Pair<LocalDate> mm = ArrayAlg.minmax(birthday);
}
}
class ArrayAlg{
public syatic <T extends Comparable> Pair<T> minmax(T[] a){
if(a==null || a.length==0) reutrn null;
T min=a[0];
T max=a[0];
for(int i=1;i<a.length;i++){
if(min.compareTo(a[i])>0) min=a[i];
if(max.compareTo(a[i])<0) max=a[i];
}
return new Pair<>(min.max);
}
}
上限限定: <? extend E > 代表的是泛型只能是E类型子类或本省
下限限定 :<? super E> 代表的是泛型只能是E类型父类或本身
泛型通配符
只能作为方法的参数使用
? 就是泛型的通配符
public void showKeyValue(Genentor<?> obj){
System.Out.println(obj[]);
}
这里的?类型实参 不是类型形参是一种真实的类型 如String Integer
代表的是任意数据类型
先写到这里之后会添加