1.简单的定义泛型类
public class pair<T>{ //java库中用T(U,S)表示任意类型 K,V表示关键字和值 通常大写
private T first;
private T second;
public Pair(){
first = null;
second = null;
}
public Pair(T first, T second){
this.first = first;
this.second = second;
}
public T getFirst(){
return first;
}
public T getSecond(){
return second;
}
public void setFirst(T newValue){
first = new Value;
}
public void setSecond(T newValue){
second= new Value;
}
}
用具体的类型替换类型变量就可以实例化泛型类型,例如(Pair<Double>
) 泛型可以看成普通类的工厂。
2.简单的定义泛型方法
class ArrayAlg{
public static <T> T getMiddle(T...a){
return a[a.length/2];
}
//有时候一些一些方法需要对类型变量加以约束,例如下面计算数组中的最大元素
public static <T> T max(T[] a){
if(a == null || a.length == 0){
return null;
}
T max = a[0];
for(int i = 1; i< a.length; i++){
if(max.compareTo(a[i]) < 0){
max = a[i];
}
}
return max;
}
//这个方法有一定的问题,T不一定具有compareTo方法,所以要加一些约束,将T限制为实现了Comparable接口的类
}
所以应该设置类型变量的限定<T extends BoundingType>
表示T应该是绑定类型的子类型。T和绑定类型可以是类,接口。如果有多个限定用”&”来分割:T extends Comparable and Serializable
class ArrayAlg{
/**
*以下方法得到一个数组中的一个包含最大和最小T类型的Pair类的实例
*@param a 一个T类型的数组
*返回一个Pair包含中最大和最小T的值,或者是空如果传入的数组是空
**/
public static <T extends Comparable> Pair<T> minmax(T[] a) {
//Comparable本身就是一个泛型类型,这里我们忽略其复杂性以及警告
if(a == null || a.length == 0){
return null;
}
T max = a[0];
T min = a[0];
for(int i = 1; i<a.length; i++){
if(min.compareTo(a[i]) > 0){
min = a[i];
}
if(min.compareTo(a[i]) < 0){
max = a[i];
}
}
return new Pair<>(min, max);
}
}
第一次写博客,就当做笔记了。