定义简单泛型类和泛型方法
2018-12-17 本文已影响0人
OrdinaryKnowing
泛型类
一个泛型类就是具有一个或多个类型变量的类。
以Pair类作为例子。
public class Pair<T>
{
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 = newValue; }
public void setSecond(T newValue){ second = newValue; }
}
Pair类引入类型变量,用尖括号<>括起来,并放在类名的后面。泛型类可以有多个类型变量。例如,可以定义Pair类,其中第一个域和第二个域使用不同的类型:
public class Pair<T,U>{...}
类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。例如
private T first;
使用具体的类型替换类型变量就可以实例化泛型类型。例如:
Pair<String>
可以将结果想象成带有构造器的普通类:
Pair<String>()
Pair<String>(String,String
和方法
String getFirst();
...
泛型类可以看作为普通类的工厂。
示例程序
package com.template;
public class Pair<T> {
private T first,second;
public Pair(){};
public Pair(T a, T b){
first=a;
second=b;
}
public void setFirst(T first){this.first=first;}
public void setSecond(T second){this.second=second;}
public T getFirst(){return first;}
public T getSecond(){return second;}
public String toString(){
return first+","+second;
}
public static void main(String args[]){
String[] sArray={"hello","how","amazing","zero"};
System.out.println(Test.minmax(sArray));
}
}
class Test{
public static Pair<String> minmax(String[] a){
if(a==null||a.length==0)return null;
String min = a[0];
String max = a[1];
for(int i=0;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);
}
}
泛型方法
class ArrayAlg{
public static <T> getMiddle(T... a)
{
return a[a.length/2];
}
}
调用泛型方法
String middle = ArrayAlg.<String>getMiddle("John", "Q", "Public");
也可以省略<String>,让编译器由后面的参数推断出类型。
String middle = ArrayAlg.getMiddle("John", "Q", "Public");