`
poyunri
  • 浏览: 29512 次
文章分类
社区版块
存档分类
最新评论

12.4类型变量的定义

阅读更多

有时类或方法需要对类型变量加以约束。

class ArrayAlg {
    public static <T> T min(T[] a) {
        if (a == null || a.length == 0)
            return null;
        T smallest = a[0];
        for (int i = 1; i < a.length; i++)
            if (smallest.compareTo(a[i]) > 0)
                smallest = a[i];
        return smallest;
    }
}

问题:min方法内部的变量smallest类型为T,意味着它可以是任意类的对象。那么如何确定T所属的类有compareTo方法呢?

解答:将T限制为实现Comparable接口的类。通过对类型变量T设置限定实现这一点:public static <T extends Comparable> T min(T[] a).......

注意:一个类型变量或通配符可以有多个限定:T extends Comparable & Serializable(限定类型用&分隔,类型变量用,分隔)

例12-2中重新编写了一个泛型方法minmax。方法是计算数组中的最大值和最小值并返回Pair<T>

package core.pair_12_2;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * @author vincent
 */

public class PairTest2 {

    public static void main(String[] args) {
        GregorianCalendar[] birthdays = 
            {
             new GregorianCalendar(1906, Calendar.DECEMBER, 9),
             new GregorianCalendar(1815, Calendar.DECEMBER, 10),
             new GregorianCalendar(1903, Calendar.DECEMBER, 3),
             new GregorianCalendar(1910, Calendar.JUNE, 22),
            };
        Pair<GregorianCalendar> mm = ArrayAlg.minmax(birthdays);
        System.out.println("min = " + mm.getFirst().getTime());
        System.out.println("max = " + mm.getSecond().getTime());
    }
}

class ArrayAlg {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static <T extends Comparable> Pair<T> minmax(T[] a) {
        if (a == null || a.length == 0) return 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<T>(min, max);
    }
}

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;
    }
}


分享到:
评论

相关推荐

    汇编语言教程

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言教程(AoGo汇编网站)

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言教程Assembly Language

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言.chm 学习汇编语言入门

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言基础教程(8086).rar

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言基础教程 汇编语言基础教程

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言教程-学习的极佳资料

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言教程.chm

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言入门到精通文档

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言基础学习资料

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    (chm)汇编语言全接触

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    80x86汇编语言教程

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言学习大全

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言程序教程(.chm格式)

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言入门帮助文档.chm

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言(在一个汇编网站上点击率在前三的电子书)

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    汇编语言程序设计(chm格式)

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

    最实用8086汇编语言教程

     1 内存变量定义的一般形式  2 字节变量  3 字变量  4 双字变量  5 六字节变量  6 八字节变量  7 十字节变量  4.3 调整偏移量伪指令  1 偶对齐伪指令  2 对齐伪指令  3 调整偏移量伪指令  4 偏移量...

Global site tag (gtag.js) - Google Analytics