A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大家都知道,泛型的出现使统一容器中存储对象的类型多了很多,这也使得程序的拓展性得到了非常大的提升,然而,因为存储对象类型更多了,是否会使程序变得更加混乱呢?同时,拓展性的提升,对安全以及性能方面,有什么影响?

4 个回复

倒序浏览
哥们,我觉得你貌似说反了
1,泛型是jdk1.5出现的新特性
2,就拿容器---Collection来说,1.4的做法呢是对象都可以存,但是取的都是Object,这时就必须强转
3,加了泛型,那么在编译的时候就会检测你存的是否是同一类型的对象,如果是--存 不是---报错,so取的时候呢就不用强转
我自己的一点理解哈
回复 使用道具 举报
泛型的出现是为了解决java代码的臃肿和繁琐的,在JDK1.5时加入的新特性;
下面以HashTable为例举个例子来说明,java的泛型;
在JDK1.5以前的版本,如果要网HashTable里存数据和取数据是这样的:
Hashtable ht = new Hashtable();
                //往集合里放入数据
                ht.put(new Integer(3),"value1");
                ht.put(new Integer(6),"value1");               
                //取数据
                String str = (String)ht.get(new Integer(3));   //如果这里不做强转的的就会报错: 需要: String  找到:    Object
                System.out.println(str);

向上面这样的情况,在JDK1.5以前,如果不做强转动作的话,每次都会报错,而且我们明明知道集合里存的就是String类型的数据,但是jvm可不这么认为,他认为里面是Object类型的数据,那么要集合中取出数据,就必须强转了,这跟程序员带来了很大的困扰,因为每次都要做强转动作,所以程序员们的心情是可想而知的{:soso_e118:}
  
在JDK1.5时,就加入了泛型,在Hashtable后面定义<key,value>两个对象的类型,这样在创建性的Hashtable对象是,我们就可以在<key,value>中定义键和值得具体类型。于是上面例子的代码就可以这样写:
Hashtable<Integer,String> ht = new Hashtable<Integer,String>();
                //往集合里放入数据
                ht.put(new Integer(3),"value1");
                ht.put(new Integer(6),"value1");
               
                //取数据
                String str = ht.get(new Integer(3));//在去数据的时候,就不用再做强转的动作了,就不用在{:soso_e135:}
                System.out.println(str);

总上所属,加入了泛型的java,我们就不用再{:soso_e135:},而可以{:soso_e160:}{:soso_e129:}了,
回复 使用道具 举报
谢波 发表于 2013-2-7 12:02
哥们,我觉得你貌似说反了
1,泛型是jdk1.5出现的新特性
2,就拿容器---Collection来说,1.4的做法呢是对象 ...

呵呵呵。。。。是的哦!确实不对!表达有误!谢啦!
回复 使用道具 举报
首先来说泛型的本质是参数化类型,引入泛型的好处是使程序安全简单。在一个就是泛型是面向编译器的,主要是让尽早的发现错误(我的理解哈)
没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马