定义简单泛型类和泛型方法

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");
上一篇下一篇

猜你喜欢

热点阅读