java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...
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,但是还是出了错......具体错误以下,如果把错误改正的话,那么就不能发挥泛型的作用,还是需要强制类型转换这样就又出 现了安全问题
------------------------------------------------------------------------------------------------------
- public class Gen { //关键在这里,还是要加Gen<T>,不加会报错
- private T ob; //定义泛型成员变量
- public Gen(T ob) {
- this.ob = ob;
- }
- public T getOb() {
- return ob;
- }
- public void setOb(T ob) {
- this.ob = ob;
- }
- public void showTyep() {
- System.out.println("T的实际类型是: " + ob.getClass().getName());
- }
- }
- public class GenDemo {
- public static void main(String[] args){
- //定义泛型类Gen的一个Integer版本
- Gen intOb=new Gen(88);
- intOb.showTyep();
- int i= intOb.getOb();//这里还是需要强制类型转换,不转换会报错
- System.out.println("value= " + i);
- System.out.println("----------------------------------");
- //定义泛型类Gen的一个String版本
- Gen strOb=new Gen("Hello Gen!");
- strOb.showTyep();
- String s=strOb.getOb();//这里还是需要强制类型转换,不转换会报错
- System.out.println("value= " + s);
- }
- }
例子二:没有使用泛型
- public class Gen2 {
- private Object ob; //定义一个通用类型成员
- public Gen2(Object ob) {
- this.ob = ob;
- }
- public Object getOb() {
- return ob;
- }
- public void setOb(Object ob) {
- this.ob = ob;
- }
- public void showTyep() {
- System.out.println("T的实际类型是: " + ob.getClass().getName());
- }
- }
- public class GenDemo2 {
- public static void main(String[] args) {
- //定义类Gen2的一个Integer版本
- Gen2 intOb = new Gen2(new Integer(88));
- intOb.showTyep();
- int i = (Integer) intOb.getOb();
- System.out.println("value= " + i);
- System.out.println("----------------------------------");
- //定义类Gen2的一个String版本
- Gen2 strOb = new Gen2("Hello Gen!");
- strOb.showTyep();
- String s = (String) strOb.getOb();
- System.out.println("value= " + s);
- }
- }
运行结果:
两个例子运行Demo结果是相同的,控制台输出结果如下:
T的实际类型是:
- java.lang.Integer
- value= 88
- ----------------------------------
- T的实际类型是: java.lang.String
- value= Hello Gen!
- Process finished with exit code 0
- ------------------------------------------------------------
java相关求助---Java泛型的理解与等价实现---------没有完全明白啊...请大神指导...相关推荐
- java 控制台刷屏 dll_Java刷屏问题,下面是我编的代码,请大神帮忙解决下,谢谢...
importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassjiemianextendsJFrame{JButtonz ...
- 请大神指导EGS5中DOSRZnrc的相关内容
本人现在做蒙卡模拟方面的课题,其中涉及到EGS5中DOSRZnrc code模拟CT数据,我想了解一下这是代码的内容以及相关介绍,求相关大神帮忙解答
- java 技术 管理_java技术转型产品或者项目管理,请大神指导?
产品和项目管理是不同的发展路径,对于题主是转型产品还是项目管理,不妨回答以下几个问题 1.自己愿意朝哪个方向发展,是产品经理还是项目管理? 2.针对项目管理和产品经理可以做SWOT分析,来更清晰的了解 ...
- java日历打印出的格式不对_Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导...
Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导 我看了一下日历,发现你打出来的其实是九月份而不是八月份,那么我猜在showPrint这里的第二个参数是从0开始的,即0~11 ...
- 理解C#语言中的类型转换----初学者的理解,请大神指教
一下都是在视频教学中学到后的理解,如果说错了请大神指教 C#语言中的类型转换,就是将某个数据要转换成另一个类型的数据. c#语言中的数据类型主要有: char类型(字符类型): string类型(字符 ...
- java 2017腾讯面试题_腾讯2017刁难面试题,是不是大神就看你会做几题
原标题:腾讯2017刁难面试题,是不是大神就看你会做几题 一.今日头条2017笔试题(决策问题) 现在有两堆石子,小今与小条玩游戏,2个人都足够聪明,两个人规定:每次每人只能从其中一堆中取走1个或2个 ...
- java学习(29):大神指导(巩固练习)
/3使用Eclipse编写控制台应用程,使用do while循环处理从控制台接收不定数量的学生英语成绩, 统计不及格(小于60分)的成绩个数,大于等于90分的优秀成绩数量, 计算所有成绩的总分.平均分 ...
- java判断题_【Java判断题】请大神们进来看下、这些判断题你都知道多少~
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .判断改错题(每题2分,共20分)(正确的打√,错误的打×并说明原因) 1. Java系统包提供了很多预定义类,我们可以直接引用它们而不必从头开始编写程序 ...
- 整理JAVA知识点--基础篇,能力有限不足地方请大神们帮忙完善下
又是找工作的季节到了,该看看了 转载于:https://www.cnblogs.com/MagicalFool/p/10436587.html
最新文章
- Nature盘点的这些代码,个个都改变了科学:Fortran、AlexNet还有arXiv等
- python numpy安装-Python--Numpy安装
- 大屏安卓车载导航刷机包_安卓手机第三方recovery是什么意思?
- 使用ildasm和ilasm修改dll
- 特征工程自动化如何为机器学习带来重大变化
- Fusion组件库是如何支持多语言能力的
- archive for required library...
- 华为上机试题 c语言,华为上机考试题库2017 2017年全国计算机等级考试C语言上机考试题库 -1-20套.doc...
- Horizon View 7 发布Win10桌面二:即时克隆桌面池配置
- 关于Java 8 forEach
- 操作系统概念(Operating System Concepts Ninth Edition恐龙书)阅读
- 八大主流浏览器自动填表功能大比拼
- win10浏览器闪退_win10系统打开ie11浏览器出现闪退的两种解决方法
- 存用部首查字典如何查_存的部首,存的偏旁部首,存的拼音,存的笔画数,存的组词,存的意思...
- 用计算机如何扫描文件,打印机扫描文件到电脑方法教程
- 请仔细核对自己的信息
- 网页中单个页面如何做好SEO优化
- [深度学习入门]两阶段目标检测算法到Faster RCNN
- Building designing
- 统计文章中的单词数量
热门文章
- python+tensorflow+captcha库:基于TF快速破解验证码
- linux系统下/proc深度解析
- 吴恩达深度学习4.3笔记_Convolutional Neural Networks_目标检测
- 38 NoSQL-memcached
- 自定义Java定时器(基于ScheduledExecutorService)
- php实参和形参不一致的情况
- css行内元素和块级元素
- 利用VBA在EXCLE2010和2007中找回2003式的经典菜单和工具栏
- 某公司机房成功搭建openssh server跳板服务器
- MFC实现打开、保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了