黑马程序员技术交流社区

标题: 泛型 [打印本页]

作者: 403383221    时间: 2013-4-27 21:47
标题: 泛型
本帖最后由 403383221 于 2013-4-28 10:17 编辑

ArrayList<String> a = new ArrayList<String>();
ArrayList<String> a = new ArrayList();
这两种写法有什么区别???
作者: 尹丽峰    时间: 2013-4-27 21:53
本帖最后由 尹丽峰 于 2013-4-27 21:55 编辑

使用该方法返回的值只能是String

以下来自互联网:
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。这带来了很多好处:

1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

作者: 403383221    时间: 2013-4-27 21:57
尹丽峰 发表于 2013-4-27 21:53
使用该方法返回的值只能是String

以下来自互联网:

大哥,我想知道上面两种写法有木有区别,不是问泛型的好处:L
作者: 一直在路上    时间: 2013-4-27 21:58
应该这两种都可以用吧,但是感觉后一种肯定没有人用,因为前面已经定义了泛型出来了,后面new的对象肯定也是String类型的,不过这两种方式都不是最好的。
最好的写法是:                List<String> list4 = new ArrayList<String>(); 这样方便面向接口编程。

作者: 尹丽峰    时间: 2013-4-27 22:00
403383221 发表于 2013-4-27 21:57
大哥,我想知道上面两种写法有木有区别,不是问泛型的好处

第一个是把a实力化为ArrayList<String>()这个类
作者: 孙胜    时间: 2013-4-27 23:26
你的第二种写法没有实用性,一旦你向集合种添加非String对象编译时不能通过的.
所以要么用第一种,全部限定类型
要么List list4 = new ArrayList<String>(); 这样写,list4在程序后面可以指向任何List类型的集合

作者: 肖宇宥    时间: 2013-4-27 23:49
泛型是给编译器看的,在内存中并不存在泛型,我觉得这两种写法功能上并没有太大的区别,只是一种编写代码的规范吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2