Java泛型总结

来源:互联网 发布:东快傻 知乎 编辑:程序博客网 时间:2024/06/07 23:58

在用Java写颠倒数组的时候,突然想到了C++的template,发现Java是以泛型来处理这个问题的,因此决定总结一下

1.泛型定义规则(与C++类比):

JavaTemplate.java

  1. 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),在返回类型之前(即下面例子中的<T>)同C++中的template <typename T>
  2. 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。同C++中定义泛型算法,<typename IteratorType,typename elemType>
  3. 注意泛型的类型参数只能代表引用型类型(类似C++的指针),不能是原始类型(如int,double,char的等)这一点和C++的template不同!
  • java的数据类型如下图:
    • “==”作用在引用数据类型间,判断内存地址是否相等,想判断内容实体用equals;
    • 基本传值传参传的是副本,修改后原值不变;引用传值传参穿的是地址,修改后原值改变。

  • 如果要对原始类型编写泛型函数,就要用Integer或Doulbe等Number类,Characte类,即int a[]改成Integer a[]
  • 貌似只有一种情况可以对原始类型定义泛型:单个变量时
public class JavaTemplate {    public static<T> void  ReverseArray (T[] TgData){        int nLen = TgData.length;        for(int i=0;i<nLen/2;++i){            T nTemp = TgData[i];            TgData[i] = TgData[nLen-1-i];            TgData[nLen-1-i] = nTemp;        }    }    public static<T> void PrintArray(T[] TgData){        for(int i=0;i<TgData.length;++i)            System.out.printf("%s ",TgData[i]);        System.out.print('\n');    }    public static <T> void PrintT(T output){        System.out.print(output);        System.out.print('\n');    }    public static void main(String []args){        Integer ArrayInt[] = {1,2,3,4,5,6};        PrintArray(ArrayInt);        ReverseArray(ArrayInt);        PrintArray(ArrayInt);        Double ArrayDouble[] = {1.0,2.0,3.0,4.0,5.0};        PrintArray(ArrayDouble);        ReverseArray(ArrayDouble);        PrintArray(ArrayDouble);        Character ArrayChar[]={'1'};        PrintArray(ArrayChar);        ReverseArray(ArrayChar);        PrintArray(ArrayChar);        double d = 8.8;        PrintT(d);        int n = 8;        PrintT(n);    }}
2.通过继承让泛型中的类型参数有界
MaxOf3Number.java
以泛型找出最大值为例,对于操作数值的方法肯定只希望接受Number类的实例,可以用extends或implements
public class MaxOf3Number {    public static<T extends Comparable<T>> T Maximum (T x,T y,T z){        T max = x;        if(max.compareTo(y) <= 0)            max = y;        if (max.compareTo(z) <= 0 )            max = z;        return max;    }    public static void main(String []args){        int x=1,y=2,z=3;        System.out.printf("%d,%d,%d的最大值为:%d\n",x,y,z,Maximum(x,y,z));        Double a=2.0,b=5.0,c=3.0;        System.out.printf("%1f,%1f,%1f的最大值为:%1f\n",a,b,c,Maximum(a,b,c));        char d='d',e='e',f='f';        System.out.printf("%s,%s,%s的最大值为:%s\n",d,e,f,Maximum(d,e,f));    }}
还有泛型类的概念,不过因为暂时用不到,所以Java泛型就点到这里为止,以后有需要再续……











0 0
原创粉丝点击