Java泛型总结
2016-04-03 21:41
375 查看
在用Java写颠倒数组的时候,突然想到了C++的template,发现Java是以泛型来处理这个问题的,因此决定总结一下
1.泛型定义规则(与C++类比):
![](file:///C:/Users/WIN7/AppData/Local/YNote/data/xuezelong2012@163.com/e39cee4e085f4be7b237f96dbcbe9074/attachment.png?1459690803975)
所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),在返回类型之前(即下面例子中的<T>)同C++中的template <typename T>
每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。同C++中定义泛型算法,<typename IteratorType,typename elemType>
注意泛型的类型参数只能代表引用型类型(类似C++的指针),不能是原始类型(如int,double,char的等)这一点和C++的template不同!
java的数据类型如下图:
“==”作用在引用数据类型间,判断内存地址是否相等,想判断内容实体用equals;
基本传值传参传的是副本,修改后原值不变;引用传值传参穿的是地址,修改后原值改变。
![](http://img.blog.csdn.net/20160403214341154?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果要对原始类型编写泛型函数,就要用Integer或Doulbe等Number类,Characte类,即int a[]改成Integer a[]
貌似只有一种情况可以对原始类型定义泛型:单个变量时
2.通过继承让泛型中的类型参数有界:
![](file:///C:/Users/WIN7/AppData/Local/YNote/data/xuezelong2012@163.com/f5d47d0607894599a27d8baa1c111070/attachment.png?1459690803975)
以泛型找出最大值为例,对于操作数值的方法肯定只希望接受Number类的实例,可以用extends或implements
还有泛型类的概念,不过因为暂时用不到,所以Java泛型就点到这里为止,以后有需要再续……
1.泛型定义规则(与C++类比):
![](file:///C:/Users/WIN7/AppData/Local/YNote/data/xuezelong2012@163.com/e39cee4e085f4be7b237f96dbcbe9074/attachment.png?1459690803975)
所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),在返回类型之前(即下面例子中的<T>)同C++中的template <typename T>
每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。同C++中定义泛型算法,<typename IteratorType,typename elemType>
注意泛型的类型参数只能代表引用型类型(类似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.通过继承让泛型中的类型参数有界:
![](file:///C:/Users/WIN7/AppData/Local/YNote/data/xuezelong2012@163.com/f5d47d0607894599a27d8baa1c111070/attachment.png?1459690803975)
以泛型找出最大值为例,对于操作数值的方法肯定只希望接受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泛型就点到这里为止,以后有需要再续……
相关文章推荐
- 20144303 《Java程序设计》第五周学习总结
- eclipse 使用Git版本控制,removve Push 报错“Error writing request body to server”
- 蛇形矩阵Java实现
- Java - Socket
- Java对象序列化
- Java的switch语句
- java遍历全盘文件时出现空指针异常
- JAVA命名、注释规范
- Semaphore(Java 信号量)
- Java集合类操作优化经验总结
- 20145314郑凯杰 《Java程序设计》第5周学习总结
- 【笔记】 《js权威指南》- 第9章 类和模块 - 9.3 Java式继承
- java中Int与String的相互转化方法
- Java版AI五子棋
- java程序的加载过程
- java静态代理与动态代理
- java第5章学习总结
- java的注解技术介绍
- 【java集合框架源码剖析系列】java源码剖析之ArrayList
- 【java集合框架源码剖析系列】java源码剖析之ArrayList