美文网首页
定义简单泛型类和泛型方法

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

作者: OrdinaryKnowing | 来源:发表于2018-12-17 11:07 被阅读0次
    泛型类

    一个泛型类就是具有一个或多个类型变量的类。

    以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");
    

    相关文章

      网友评论

          本文标题:定义简单泛型类和泛型方法

          本文链接:https://www.haomeiwen.com/subject/zbrqkqtx.html