谈谈我眼中的泛型

很早的时候我就接触了泛型,但是那个时候并不了解泛型有什么好处,在抽象的过程中使用泛型,后来接触到了gxpt系统,这个系统框架中,用的是泛型方法.那个时候只是知道这么用,说是可以解决重复写代码的问题,但是我并没有体会到,后来接触了Itoo 这个框架,这个里面用的是泛型类,同时我正在的参与到这个系统中,在跟gxpt相比,我体会到了使用泛型的好处.

一.介绍

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

二.解决问题

在JDK1.5 还没有泛型的时候,通过使用类型Object的来实现参数的”任意化”.实现参数任意化需要对显式进行强制类型转换.而且这种强制转换要求开发者对实际参数类型是预知的.对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个很大的安全隐患.如果使用泛型,就可以在编译阶段就发现这个错误,并且所有的强制转换都是自动和隐式的,再一次提高了代码的复用率.总结一句话就是泛型解决抽象过程中需要显式强制转换的问题,把主动变成被动,再次提高代码的复用率.

三.实例

无泛型,使用Object+强制转换实现抽象:

<span style="font-size:18px;">/**
 * 使用Object 类型,显示需要强制转换
 * @author huan
 *
 */
public class NoGen {
	private Object ob; //定义泛型成员变量

	public NoGen(Object ob){
		this.ob=ob;
	}
	public Object Getob(){
		return ob;
	}

	public void setOb(Object ob){
		this.ob=ob;
	}

	public void showType(){
		System.out.println("T的实际类型是:" +ob.getClass().getName());
	}
}

public class GenDemo2 {
	public static void main(String[] args) {
		//定义泛型类NoGen 的一个Integer版本
		NoGen intOb=new NoGen(new Integer(88));
		intOb.showType();
		int i=(int) intOb.Getob();
		System.out.println("Value="+i);
		System.out.println("------------------");

		//定义泛型类Gen的一个String版本
		NoGen strOb=new NoGen("Hello Gen!");
		strOb.showType();
		String s=(String) strOb.Getob();
		System.out.println("value="+s);
	}
}
</span>

对应类图:

使用泛型实现抽象:

<span style="font-size:18px;">public class 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 showType(){
		System.out.println("T的实际类型是:" +ob.getClass().getName());
	}
}

/**
 * 使用泛型
 * @author huan
 *
 */
public class GenDemo {
	public static void main(String[] args) {
		//定义泛型类Gen 的一个Integer版本
		Gen<Integer> intOb=new Gen<Integer>(88);
		intOb.showType();
		int i=intOb.Getob();
		System.out.println("Value="+i);
		System.out.println("------------------");

		//定义泛型类Gen的一个String版本
		Gen<String> strOb=new Gen<String>("Hello Gen!");
		strOb.showType();
		String s=strOb.Getob();
		System.out.println("value="+s);
	}
}
</span>

对应类图:

从两张类图可以看出,Object+强制转换实现的抽象是被动的,使用泛型事项的抽象是主动的.使用主动替换被动,让封装的代码侵入性更小.

四.泛型类与泛型方法的区别

从作用域来说,泛型类的作用域要比泛型方法要小一些.使用泛型类所受到的限制要大一些.

从加载的情况来看,泛型类推迟了加载时间,属于懒加载.

五.总结

1.使用泛型,泛型的中的参数是地址传值还是按值传递.

答案:是地址传值

2.从复用性的角度来说,泛型类和泛型方法那个更好.gxpt运用的是泛型方法,itoo使用的泛型类.itoo使用泛型类是为了把底层进行进一步的封装.提高代码的复用率.

3.使用集合的时候都会用上泛型,那么容器是集合+方法,在容器中,泛型也是常用的。所以学习容器的时候,应该先理解泛型的思想.

时间: 2024-10-24 22:02:16

谈谈我眼中的泛型的相关文章

谈谈我眼中的安徽企腾信息技术集成有限公司

在这里工作一段时间后,说说自己眼中的安徽企腾,我尽量本着客观的原则,不带任何主观因素与感情色彩. 首先,先说说规模,所谓的分成售前与售后,其实就是虚张声势,售前不过是一些笔记本的售后维修,售后与售前基本上没什么关系.而售后,销售加上技术,最多时也不过7个人.平时一些项目,大一点,一些不能做的直接外包出去,小一点的项目,所谓的"施工队",就是全体总动员. 公司里做了好几块业务,其中一块是飕飕商用路由,刚开始,想的是多么好,但是最后却被浇了一盆冷水,市场根本不接受,唯一做了一家宾馆,还是连

谈谈我眼中的CSDNwe

CSDN支持HTML富文本粘贴很多人写博文通常会先在自己喜欢的编辑器里写好.排版好,然后直接copy到网站的编辑器里发表(这样某种程度上也能避免浏览器一个不小心崩溃,文章尽失,我亲身经历过,痛苦万分).如果你在原来编辑器的文章排版的很精美,有各种好看的HTML样式.某些字体进行了颜色区分.代码样式黑底白字各种高亮.引用样式好看.列表样式好看,那么粘贴在CSDN html编辑器里不会改变你的样式,真正的所见即所得.但在博客园里呢?一粘贴进去啥样式都没了,颜色没了.字体大小变为默认的了,标题样式.列

我眼中的信息安全

***********************************************声明****************************************************** 原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不足,欢迎斧正! *******************************************

入门量化两年,谈谈我对量化投资的理解

虽然我现在已经入门量化投资两年,但是我还没有接触量化投资之前,和大家一样,只有一种感觉那就是神秘,难度大;但通过学习了量化金融分析师AQF实训项目之后,慢慢的对量化投资有一定理解之后,量化投资并没有大家想象的那么复杂.今天就谈谈我眼中的量化投资,如有理解不对的地方,欢迎一起讨论.>>>点击咨询量化金融分析师AQF实训项目 我列举了四大列去进行一个理解,分别是什么是量化投资?.量化投资的发展历程.量化投资的分类有哪些?以及最后一个量化和对冲. 一.什么是量化投资? 量化投资其实就是定量投资

论软件工程

论软件工程 昨天一位同学问我对软件工程的体会?当时愣住了一下,不知道该怎么回答,感觉话到嘴边却不知道怎么表达,因为这个话题比较沉重,不知道该怎么用简短的语言来进行描述,要说可能一天都说不完,可能是自己的表达能力有限,语文没学好(高考语文不到80分),当时只是给出了:"这叫我怎么回答"这样的答案.随后在我的脑海里一直回忆自己开发经历,想从中找到一些信息.第一次听到软件工程是大三的时候有一门课程叫做软件工程,我依稀记得里面几个关键词语:髙聚类.低耦合.可扩展性.可行性.可维护性,同时还包括

下一代大数据系统和4S标准

大数据行业发展到今天,它创造的价值和带来的社会效应,大家已经看得很明白,同时很多问题和不足也暴露出来,特别是hadoop能够提供的数据处理能力,现在已经挖掘到极限,但是现在各行业对数据的存储和计算需求,似乎却没有停止的迹象.在最近的一次大数据论坛上,大家开始讨论下一代大数据系统和系统标准,借此机会,我们Laxcus大数据实验室表达了自己的看法,提出了4S标准,得到与会者的普遍赞同和肯定.回来后,觉得这个话题应该再说说,所以借着CSDN这个平台,和诸位谈谈我们眼中的下一代大数据系统和4S标准. 概

产品经理怎样才干把一件事做出色

一个老生常谈的话题,有人说"产品经理就是不断让正确的事情发生".又有人说"产品经理要为团队摸清方向.指明道路". 姑娘承认.这些说法都极为正确,可是今天想简单和大家谈谈我眼中产品经理怎样才干把一件事情做出色. 站的多高 想的多远 近期接手了一个新的外部合作项目. 在普通的产品经理眼中,目的是把项目在规定的期限内完毕接入上线;高一层的产品经理眼中,目的是把项目在规定的期限内完毕接入上线,并拥有良好的用户体验;但优秀的产品经理的眼中,目的是把项目在规定的期限内完毕接入上

产品经理如何才能把一件事做出色

一个老生常谈的话题,有人说"产品经理就是不断让正确的事情发生",又有人说"产品经理要为团队摸清方向,指明道路".姑娘承认,这些说法都极为正确,但是今天想简单和大家谈谈我眼中产品经理如何才能把一件事情做出色. 站的多高 想的多远 最近接手了一个新的外部合作项目.在普通的产品经理眼中,目的是把项目在规定的期限内完成接入上线;高一层的产品经理眼中,目的是把项目在规定的期限内完成接入上线,并拥有良好的用户体验;但优秀的产品经理的眼中,目的是把项目在规定的期限内完成接入上线,

AI行为树的工作原理

最近在项目中应用到了行为树,在网上看了不少关于行为树的文章,其中有一篇文章我觉得写得非常到位,它的原文是英文.在这篇文章里我会它的大致意思给翻译出来(注:由于原文有不少啰嗦的地方,所以没有逐句的翻译),以它的行为结构为标准,并会在译文中穿插一些自己的理解来谈谈我眼中的行为树. 原文链接 一.介绍 尽管网上已经有大量关于行为树的教程,但是在开发游戏中的 AI 时还是遇到了不少关于行为树的问题.很多教程不关注于代码的实现,而是给出一些非常笼统的节点图,就像这样: 这些节点看起来非常的抽象,这对于我了