Java泛型总结

在用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的影城管理系统,源码+数据库+论文答辩+毕业论文+视频演示 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。 关键词:小徐影城管理系统;Spring Boot框架,MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值