1.泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的        创建中,分别称为泛型类、泛型接口、泛型方法。

2.Java泛型被引入的好处是安全简单。

在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转     换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才     出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型在使用中还有一些规则和限制:

1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。

2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。

3、泛型的类型参数可以有多个。

4、泛型的参数类型可以使用extends语句,例如。习惯上成为“有界类型”。

5、泛型的参数类型还可以是通配符类型。例如Class classType = Class.forName(java.lang.String);

泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

例子一:使用了Java泛型

------------------------------------------------------------------------------------------------

这里我用了javase1.6,但是还是出了错......具体错误以下,如果把错误改正的话,那么就不能发挥泛型的作用,还是需要强制类型转换这样就又出     现了安全问题

------------------------------------------------------------------------------------------------------

  1. public class Gen {  //关键在这里,还是要加Gen<T>,不加会报错
  2.  private T ob; //定义泛型成员变量
  3.  public Gen(T ob) {
  4. this.ob = ob;
  5.  }
  6.  public T getOb() {
  7. return ob;
  8.  }
  9.  public void setOb(T ob) {
  10. this.ob = ob;
  11.  }
  12.  public void showTyep() {
  13. System.out.println("T的实际类型是: " + ob.getClass().getName());
  14.  }
  15. }
  16. public class GenDemo {
  17.  public static void main(String[] args){
  18.  //定义泛型类Gen的一个Integer版本
  19.  Gen intOb=new Gen(88);
  20.  intOb.showTyep();
  21.  int i= intOb.getOb();//这里还是需要强制类型转换,不转换会报错
  22.  System.out.println("value= " + i);
  23.  System.out.println("----------------------------------");
  24.  //定义泛型类Gen的一个String版本
  25.  Gen strOb=new Gen("Hello Gen!");
  26.  strOb.showTyep();
  27.  String s=strOb.getOb();//这里还是需要强制类型转换,不转换会报错
  28.  System.out.println("value= " + s);
  29. }
  30. }

例子二:没有使用泛型

  1. public class Gen2 {
  2.  private Object ob; //定义一个通用类型成员
  3.  public Gen2(Object ob) {
  4. this.ob = ob;
  5.  }
  6.  public Object getOb() {
  7. return ob;
  8.  }
  9.  public void setOb(Object ob) {
  10. this.ob = ob;
  11.  }
  12.  public void showTyep() {
  13. System.out.println("T的实际类型是: " + ob.getClass().getName());
  14.  }
  15. }
  16. public class GenDemo2 {
  17.  public static void main(String[] args) {
  18. //定义类Gen2的一个Integer版本
  19. Gen2 intOb = new Gen2(new Integer(88));
  20. intOb.showTyep();
  21. int i = (Integer) intOb.getOb();
  22. System.out.println("value= " + i);
  23. System.out.println("----------------------------------");
  24. //定义类Gen2的一个String版本
  25. Gen2 strOb = new Gen2("Hello Gen!");
  26. strOb.showTyep();
  27. String s = (String) strOb.getOb();
  28. System.out.println("value= " + s);
  29.  }
  30. }

运行结果:

两个例子运行Demo结果是相同的,控制台输出结果如下:

T的实际类型是:

  1. java.lang.Integer
  2. value= 88
  3. ----------------------------------
  4. T的实际类型是: java.lang.String
  5. value= Hello Gen!
  6. Process finished with exit code 0
  7. ------------------------------------------------------------

java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...相关推荐

  1. java 控制台刷屏 dll_Java刷屏问题,下面是我编的代码,请大神帮忙解决下,谢谢...

    importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassjiemianextendsJFrame{JButtonz ...

  2. 请大神指导EGS5中DOSRZnrc的相关内容

    本人现在做蒙卡模拟方面的课题,其中涉及到EGS5中DOSRZnrc code模拟CT数据,我想了解一下这是代码的内容以及相关介绍,求相关大神帮忙解答

  3. java 技术 管理_java技术转型产品或者项目管理,请大神指导?

    产品和项目管理是不同的发展路径,对于题主是转型产品还是项目管理,不妨回答以下几个问题 1.自己愿意朝哪个方向发展,是产品经理还是项目管理? 2.针对项目管理和产品经理可以做SWOT分析,来更清晰的了解 ...

  4. java日历打印出的格式不对_Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导...

    Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导 我看了一下日历,发现你打出来的其实是九月份而不是八月份,那么我猜在showPrint这里的第二个参数是从0开始的,即0~11 ...

  5. 理解C#语言中的类型转换----初学者的理解,请大神指教

    一下都是在视频教学中学到后的理解,如果说错了请大神指教 C#语言中的类型转换,就是将某个数据要转换成另一个类型的数据. c#语言中的数据类型主要有: char类型(字符类型): string类型(字符 ...

  6. java 2017腾讯面试题_腾讯2017刁难面试题,是不是大神就看你会做几题

    原标题:腾讯2017刁难面试题,是不是大神就看你会做几题 一.今日头条2017笔试题(决策问题) 现在有两堆石子,小今与小条玩游戏,2个人都足够聪明,两个人规定:每次每人只能从其中一堆中取走1个或2个 ...

  7. java学习(29):大神指导(巩固练习)

    /3使用Eclipse编写控制台应用程,使用do while循环处理从控制台接收不定数量的学生英语成绩, 统计不及格(小于60分)的成绩个数,大于等于90分的优秀成绩数量, 计算所有成绩的总分.平均分 ...

  8. java判断题_【Java判断题】请大神们进来看下、这些判断题你都知道多少~

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .判断改错题(每题2分,共20分)(正确的打√,错误的打×并说明原因) 1. Java系统包提供了很多预定义类,我们可以直接引用它们而不必从头开始编写程序 ...

  9. 整理JAVA知识点--基础篇,能力有限不足地方请大神们帮忙完善下

    又是找工作的季节到了,该看看了 转载于:https://www.cnblogs.com/MagicalFool/p/10436587.html

最新文章

  1. Nature盘点的这些代码,个个都改变了科学:Fortran、AlexNet还有arXiv等
  2. python numpy安装-Python--Numpy安装
  3. 大屏安卓车载导航刷机包_安卓手机第三方recovery是什么意思?
  4. 使用ildasm和ilasm修改dll
  5. 特征工程自动化如何为机器学习带来重大变化
  6. Fusion组件库是如何支持多语言能力的
  7. archive for required library...
  8. 华为上机试题 c语言,华为上机考试题库2017 2017年全国计算机等级考试C语言上机考试题库 -1-20套.doc...
  9. Horizon View 7 发布Win10桌面二:即时克隆桌面池配置
  10. 关于Java 8 forEach
  11. 操作系统概念(Operating System Concepts Ninth Edition恐龙书)阅读
  12. 八大主流浏览器自动填表功能大比拼
  13. win10浏览器闪退_win10系统打开ie11浏览器出现闪退的两种解决方法
  14. 存用部首查字典如何查_存的部首,存的偏旁部首,存的拼音,存的笔画数,存的组词,存的意思...
  15. 用计算机如何扫描文件,打印机扫描文件到电脑方法教程
  16. 请仔细核对自己的信息
  17. 网页中单个页面如何做好SEO优化
  18. [深度学习入门]两阶段目标检测算法到Faster RCNN
  19. Building designing
  20. 统计文章中的单词数量

热门文章

  1. python+tensorflow+captcha库:基于TF快速破解验证码
  2. linux系统下/proc深度解析
  3. 吴恩达深度学习4.3笔记_Convolutional Neural Networks_目标检测
  4. 38 NoSQL-memcached
  5. 自定义Java定时器(基于ScheduledExecutorService)
  6. php实参和形参不一致的情况
  7. css行内元素和块级元素
  8. 利用VBA在EXCLE2010和2007中找回2003式的经典菜单和工具栏
  9. 某公司机房成功搭建openssh server跳板服务器
  10. MFC实现打开、保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了