求教JAVA范型解惑

稻草鸟人 发布于 2012/11/10 20:09
阅读 256
收藏 1

做开发也有几年了,一边要帮公司做.NET的简单开发,一边也要帮公司做JAVA开发.还有很多想学的东西,比如Python.也想学你们看看开源项目的源码.但终究不知道学什么,什么也学不精通.经常看到别人简历上写精通这个精通那个,我总不太淡定.一直有个疑惑关于范型.想请教下大家.下面的例子区别是什么

1. List<Object>        和    List<T extends Object>

  后者被称为有界类型,在java的世界里所有的事物都应该称为对象吧,前者和后者有差别么??后者参数里面的T改成问号又是什么意思呢?有差别么?

2.List<Object>        和    List<?> 

前者参数表示所有类型而后者则不确定类型.这个我大概知道了,当后者list里面添加了String类型就不能再添加其他不同类型的数据了,那前者呢?

加载中
0
宏哥
宏哥

建议不要搞泛型

泛型是C++这种静态语言需要的, 是编译时特性, 泛型的意义在于指针是无形的.

Java的类型, 是自描述的, 引用自身已经包含了所有的信息, 泛型是无意义的.

稻草鸟人
稻草鸟人
没想到是OSCHINA的活跃分子宏哥给小弟留言了~.好吧,既然来了,我就抓着你再请教你一个问题吧,宏哥对Python有了解么?这个东西可以干嘛用,没有有好的教程推荐?
0
ajavaloser
ajavaloser

List<Object>取出来的必然只能是object,你不能想当然以为是string,因为可能其他元素是Integer

@宏哥 难道java的泛型就不是编译时特性,所以的信息在编译时都能拿到?

ajavaloser
ajavaloser
@mars.ma 比如说你list<String> 取出来就是string,不会是Integer或者其他的,不需要强类型转换,如果你不小心放了一个Integer进去了,立马编译报错,不会到运行时才发现
稻草鸟人
稻草鸟人
回复 @ajavaloser : 何处才有优势?
ajavaloser
ajavaloser
@mars.ma 我觉得是,但这没意义,和raw type没区别,因为你拿出来的是object,利用不到泛型的优势
稻草鸟人
稻草鸟人
好吧,这也算是一种解释,所以List<Object>里面可以存放多种不同类型的数据咯?
0
宏哥
宏哥

引用来自“ajavaloser”的答案

List<Object>取出来的必然只能是object,你不能想当然以为是string,因为可能其他元素是Integer

@宏哥 难道java的泛型就不是编译时特性,所以的信息在编译时都能拿到?

也是, 但是没有意义. 静态语言是为了代码不要再敲一遍, 或者所谓"类型无关性",泛型和宏的作用差不多.

对于Managed code, 泛型都不会带来多少价值. 对弱类型来说, 就完全没有意义了.

回复 @mars.ma :  Python 用处其他我不太知道,至少完全替代Java是很轻松的. Python有两个特点很好,

一个就是弱类型, 导致开发效率高, 和PHP类似

 另外一个它的数据结构和C的结构很匹配, 可以和任何的C库很容易集成

 教程就用官网的教程. 我没有看过更好的

稻草鸟人
稻草鸟人
那东西这么牛B
0
六只
六只

看看这个估计就明白了。http://www.congmo.net/blog/2012/10/20/java-generics/

泛型无非就是为了类型安全,使一些问题可以在编译期就暴露出来。java里面在编译的时候会被擦掉。

稻草鸟人
稻草鸟人
@六只 我的域名和服务器都要钱的,我去.租的VPS.花钱找罪受,还好都是小钱,当丢了,哈
六只
六只
@mars.ma 哈哈,没有厉害不厉害一说。我那个除了域名都不花钱,托管到github上了。纯用来做博客挺不错的。可以试试
稻草鸟人
稻草鸟人
@六只 @六只 不错不错.我也搭了一个,每个月还要付款几十块呢.不知道值不值得,自己都不怎么写.没你厉害
六只
六只
@mars.ma 嗯,之前比较清闲就自己搭了一个。没事儿写写,也算作些记录。:)
稻草鸟人
稻草鸟人
这个是你的独立博客么,看起来很好啊
返回顶部
顶部