zoukankan      html  css  js  c++  java
  • 泛型程序设计

    Java中的泛型与C++中的模板类似,不过没有template关键字。

    泛型类

    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() {return first;}
        public T getSecond() {return second;}
        public void setFirst(T newValue) {first = newValue;}
        public void setSecond(T newValue) {second = newValue;}
        
        private T first;
        private T second;
    }

    泛型方法

    泛型方法可以定义在普通类和泛型类中

    class ArrayAlg
    {
        public static <T> T getMiddle(T[] a)
        {
            return a[a.length/2];
        }
    }

    调用泛型方法:

    String[] names = {"John", "Q.", "Public"};

    String middle = ArrayAlg.<String>getMiddle(names);//实际上,<String>可以省略,Java会根据参数names的类型自动判断。

    有时,需要对泛型中的类型加以约束。例如:

    class ArrayAlg
    {
        public static <T> T min(T[] a)// almost correct
        {
            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;
        }
    }

    上面的例子中有一个问题,那就是类型T必须实现了compareTo方法。为了加上这个约束,我们将类型T限制为实现了Comparable接口的类。

    public static<T extends Comparable>T min(T[] a);

    为什么用extends而不用implements?因为这里的约束不仅可以是接口,也可以是类。

    一个类型变量或通配符可以有多个限定。例如:

    T extends Comparable & Serializable

    多个限定中,只能有一个类,可以有多个接口。类必须放在第一个。

    约束与局限性

    不能使用基本类型替换类型参数。因此,没有Pair<double>,只有Pair<Double>,因为类型必须是类。

  • 相关阅读:
    POJ 3356 水LCS
    POJ 2250 (LCS,经典输出LCS序列 dfs)
    POJ 1080( LCS变形)
    整数划分问题之最大乘积
    进程调度之FCFS算法(先来先运行算法)
    c模拟银行家资源分配算法
    c模拟内存分配算法(首次适应算法,最佳适应算法,最坏适应算法)
    HDU 2602 Bone Collector(经典01背包问题)
    NYOJ 44 字串和 (最大字串和 线性dp)
    匈牙利游戏(codevs 1269)
  • 原文地址:https://www.cnblogs.com/johnsblog/p/4187218.html
Copyright © 2011-2022 走看看