Java核心技术卷I:基础知识(原书第8版):12.2 简单泛型类的定义

来源:互联网 发布:潘粤明 董洁 知乎 编辑:程序博客网 时间:2024/05/19 19:31

铁文整理

12.2 简单泛型类的定义

    一个泛型类就是具有一个或多个类型变量的类。本章使用一个简单的Pair类作为例子。对于这个类来说,我们只关注泛型,而不会为数据存储的细节烦恼。下面是Pair类的代码:

public class Pair<T> {

    public Pair() {

        first = null;

        second = null;

    }

 

    public Pair(T first, T second) {

        this.first = first;

        this.second = second;

    }

 

    public T getFirst() {

        returnfirst;

    }

 

    public T getSecond() {

        returnsecond;

    }

 

    public void setFirst(T newValue) {

        first = newValue;

    }

 

    public void setSecond(T newValue) {

        second = newValue;

    }

 

    private Tfirst;

    private Tsecond;

}

    Pair类引入了一个类型变量T,用尖括号括起来,并放在类名的后面。泛型类可以有多个类型变量。例如,可以定义Pair类,其中第一个域和第二个域使用不同的类型:

public class Pair<T, U> { ... }

    类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。例如,

    private T first; // uses type variable

    注释:类型变量使用大写形式,且比较短,这是很常见的。在Java库中,使用变量E表示集合的元素类型,KV分别表示表的关键字与值的类型。T(需要时还可以用临近的字母US表示“任意类型”。

    用具体的类型替换类型变量就可以实例化泛型类型,例如:

    Pair<String>

    可以将结果想像成带有构造器的普通类:

    Pair<String>()

    Pair<String>(String, String)

    和方法:

    String getFirst()

    String getSecond()

    void setFirst(String)

    void setSecond(String)

    换句话说,泛型类可看作普通类的工厂。

    12-1中的程序使用了Pair类。静态的minmax方法遍历了数组并同时计算出最小值和最大值。它用一个Pair对象返回了两个结果。回想一下compareTo方法比较两个字符串,如果字符串相同则返回0,如果按照字典顺序,第一个字符串比第二个字符串靠前,就返回负值,否则,返回正值。

    C++注释:从表面上看,Java的泛型类类似于C++的糢板类,惟一明显的不同是Java没有专用的template关键字。但是,在本章中读者将会看到,这两种机制有着本质的区别。

12-1 PairTest1.java

/**

 * @version 1.00 2004-05-10

 * @author Cay Horstmann

 */

public class PairTest1 {

    public static void main(String[] args) {

        String[] words = { "Mary","had", "a", "little", "lamb" };

        Pair<String> mm = ArrayAlg.minmax(words);

        System.out.println("min = " + mm.getFirst());

        System.out.println("max = " + mm.getSecond());

    }

}

 

class ArrayAlg {

    /**

     * Gets the minimum and maximum of an array of strings.

     *

     * @param a

     *            an array of strings

     * @return a pair with the min and max value, or null if a is null or empty

     */

    public static Pair<String> minmax(String[] a) {

        if (a ==null || a.length == 0)

            returnnull;

        String min = a[0];

        String 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<String>(min, max);

    }

}


0 0
原创粉丝点击