- 浏览: 1522966 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
xml 代码
- (本文例子适用于JDK 5.0, 学习请先安装并配置!!!)
- 我们从一个简单的例子开始:假设我们现在需要一个专用来存储字符串的List,该如何实现?呵呵,这还不简单,且看如下代码:
- public static void main(String[] args)
- {
- List strList = new ArrayList();
- strList.add("one");
- strList.add("two");
- }
- 相信很多人都有过这样写的经历,不错,这个写法确实没有错。以前我们甚至都是这么做的。但是不是说要与时俱进么?这样的写法到今天来看,却就有问题了。问题来源于我们的需求,我们需要的是一个专门用来存储字符串的List,现在请在这段程序代码后面加一句,使之变成这样:
- public static void main(String[] args)
- {
- List strList = new ArrayList();
- strList.add("one");
- strList.add("two");
- strList.add(new Integer(1));
- }
- 然后运行检查一下,可以运行!是个好消息,别高兴,问题就在于这个List能正常运行(记住:程序员要求的不是程序能运行)。回头看看,我们的需求是这个List专门用来存储字符串,但是现在,这个List竟然还可以存储一个整型数据。也许你会说,Java类库定义的不就是可以存储任意一个Object么?是的,没错,但是现在我们的需求范围变小了,只需要存储字符串。别说我是钻牛角尖,我们看一个更普遍的问题:当我们操作数据库的时候,我们经常会返回一张表的所有数据,在我们通过实体关系映射之后,我们得到的就是一系列相同类型的数据,通常我们采取的操作是用一个List来保存这一系列的数据,但是由于这些数据都具有相同的类型,因此,这个List也就成了一个保存单一对象的List了。看到这里,我想对于我这个例子的目的大家应该清楚了。
- 现在我们来讨论一下问题的解决之道,一句话来总结就是我们需要一个只能操作单一类型的List。方法就在这里,Java 5给我们提供了解决之道-----Generic,对于我们的这个例子来说,Java5的类型安全要发挥作用了。
- 现在我们回到程序清单一,打开你的开发工具,编译一下(Eclipse等工具下面不用你自己变异就可以看到),我们发现程序虽然没有错误,但是却有一个警告:
- Type safety: The method add(Object) belongs to the raw type List.
- References to generic type List should be parameterized
- 看见了么, JavaTiger给你警告了,警告的来源就是上面所说的类型安全。如果你查询一下Javadoc,你会发现List 是这样定义的 :
- Public interface List<E> extends Collection,Iterable
- 注意这个<E>,它就是JavaTiger的类型安全标志,我想,到这里可以给出在保证类型安全时我们例子中的List应该如何定义了:
- List<String> strList = new ArrayList<String>();
- 在理解这条语句之前请先记住,以后这就是List的官方写法了(^_^)。现在来看一下,在List之后我们有<String>这样的标志,在JavaTiger里面,这就是类型安全的定义方法,结合这条语句,很容易就可以看出,我们定义了一个用来存储String类型的List。来看看重新定义后的效果:
- public static void main(String[] args)
- {
- List<String> strList = new ArrayList<String>();
- strList.add("one");
- strList.add("two");
- }
- 再编译一下或者直接在Eclipse里面观察,先前的警告没有了。
- 到此,应该说我们已经掌握了类型安全的基本用法了,现在我么来个小小的改变,将List 的定义改成这样:
- List<String> strList = new ArrayList();
- 呵呵,警告又回来了。虽然我们在这里对List定义了String类型,但是我们在实例化的时候去却没有指定,因此出现了这个警告,所以记住上面讲的官方写法。
- 现在回来,让我们来验证一下这个保证了类型安全的List是不是安全的。让我们还是通过向这个list 添加一个整型数据来验证:
- public static void main(String[] args)
- {
- List<String> strList = new ArrayList<String>();
- strList.add("one");
- strList.add("two");
- strList.add( new Integer(1) );
- }
- 结果竟然出错了(这可不是警告啊!) 是不是很神奇?看一下出错的消息:
- The method add(String) in the type List is not applicable for the arguments (Integer)
- 效果很明显,这个List的add方法已经只能接受String类型的参数了,Javadoc中的add( Object obj )方法已经不能用了,现在大家都应该很满意了吧,我们的需求达到了,这个List太安全了,呵呵。想想它带来的好处,以后当我们要处理一个List中间的元素时,再也不需要这么写了:
- String str = (String) list.get( i );
- 有了类型安全,我们可以直接书写:
- String str = list.get( i );
- 也许这还不以让你来满意,但是看这样一个方法吧:
- public List<String> getStrList( List<String> list )
- {
- .....
- return XXX;
- }
- 这就是参数化类型的威力,别告诉我说你觉得这个方法没有什么特别的。
- 好了,我想我的目的应该已经达到了,大家应该明白Java5里面的类型安全是怎么回事以及如何运用了,好吧,为了让大家心里更有底,再写两行代码让大家看看:
- Map<Integer,String> myMap = new HashMap<Integer ,String>();
- Set<MyClass> set = new HashSet<MyClass>(0);
- 不用再举例了吧,这几个例子够直白了吧。
- 在本文结束的时候,让我们又回到程序清单一,先前不是有警告么?如果你是这样一个人,既不想用类型安全来消除警告,又不想要看到那个讨厌的Waining,你可以在main方法以前加上这么一句(如果你用IDE的话可以自动来完成):
- @SuppressWarnings("unchecked") 。
- 使程序变成这样:
- @SuppressWarnings("unchecked")
- public static void main(String[] args)
- {
- List strList = new ArrayList();
- strList.add("one");
- strList.add("two");
- strList.add( new Integer(1) );
- }
- 这下子我想就算你如此挑剔也应该满足了,既没有类型安全,也没有警告了。为什么?关键在于我们添加的那行语句,它也是 JavaTiger的新特性之一Annotation:至于它是怎么回事,请关注后续话题。
评论
3 楼
fengzhenda
2010-03-11
谢了,解决了我的疑问。
2 楼
onwulc
2008-04-13
感谢分享,解决了我的困惑
1 楼
咖啡舞者
2007-10-30
很详细,学习了。
发表评论
-
(转)SQLデータ型
2011-08-24 18:09 2110https://www.microfocus. ... -
(转)Determining equivalent SQL and COBOL data types
2011-08-24 18:01 1448http://publib.boulder.ibm ... -
(转)grep Programs and Regular expressions
2011-08-10 13:10 1180http://ss64.com/bash/grep-r ... -
(转)find:根据指定条件查找文件
2011-08-10 11:34 1000http://man.ddvip.com/ ... -
(转)[红旗] 手动可以执行,加入crontab 就不行了
2011-07-05 13:07 1768http://bbs.chinaunix.net ... -
(转)Linux——计划任务管理
2011-07-04 15:02 1533http://hi.baidu.com/%BA%CE%B4 ... -
(转)CentOS的计划任务,Crontab安装及使用方法
2011-07-04 15:01 3076http://www.hitsword.org/re ... -
(转)Windows如何压缩tar.gz格式
2011-05-11 10:34 1242http://www.viosem.com/2008/ ... -
(转)日语的文字编码
2011-03-02 10:23 1614http://blog.csdn.net/jackyren ... -
(转)《软件工程的事实与谬论》
2010-11-04 09:57 1645http://book.group.iteye.com ... -
(转)VB6迁移到VB.NET的一些问题汇总
2010-11-03 15:02 1762http://www.cnblogs.com/ols/ar ... -
(转)《张冰Java视频教程》(struts Hibernate spring jsp J2SE)长期更新
2010-07-14 20:51 0http://www.verycd.com/topics/ ... -
(转)使用httpclient4登录百度
2010-02-26 14:45 0http://legend30g-4/article/h ... -
(转)如何一次性从Outlook Express中导出邮件
2010-01-06 13:23 5622http://hi.baidu.com/grape17/b ... -
Top Ten TPC-E by Performance
2009-10-21 14:50 1014http://www.tpc.org/tpc ... -
IBM DB2 UDB 和 SQL Server 2000
2009-10-21 14:49 1326http://www.microsoft.com/chin ... -
TCP/IP環境のPCからメインフレームを使用する
2009-10-16 11:51 0http://cap-l.sakushin-u.ac.jp:8 ... -
JP1名词解释
2009-10-10 15:17 3240http://soft.yesky.com/0/30685 ... -
Java 内存溢出的可能性汇总
2009-02-18 13:42 15401 分配的内存太小, 请使用 JVM 参数设置更大的可用内存 ... -
Java web应用内存溢出 [已结帖,结帖人:pengble]
2009-02-18 13:40 2252加为好友发送私信在线聊天
相关推荐
针对Java SDK5.0的新特性而出的一本书,O'relly出版社出版的经典!
Java 是我最熟悉的程序语言,在这之前我已经撰写一些 J2SE 1.4.2 的心得文件,您可以在 这里 下载这些文件,2004年9月30日 Tiger/J2SE 5.0 已经公布,它有了一些大的变动与改进,这个分区将整理一些我在了解 J2SE ...
JDK目前最新的版本為代號為Tiger的JDK 5.0版(JDK 1.5),自JDK1.2版之後的JDK工具組,由於相較於先前的版本增加了許多新的特性,因此冠上Java 2的字眼,稱為J2SDK(Java 2 SDK,Java 2 Software Development Kit),而...
本规范是JSR-176(定义了JavaTM平台 Tiger(5.0)发布版的主要特性)的一部分。本规范的标准内容将合并到JavaTM语言规范、JavaTM虚拟机规范以及java.lang包的类说明中。本JSR-133规范将不再通过JCP维护和修改。未来...
本规范是JSR-176(定义了JavaTM平台 Tiger(5.0)发布版的主要特性)的一部分。本规范的标准内容将合并到JavaTM语言规范、JavaTM虚拟机规范以及java.lang包的类说明中。本JSR-133规范将不再通过JCP维护和修改。未来...
J2SE5.0(Tiger)的发布是Java语言发展史上的一个重要的里程碑,是迄今为止在Java编程方面所取得的最大进步.J2SE5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持,枚举类型(enumeration)的支持,元数据...
本规范是JSR-176(定义了JavaTM平台 Tiger(5.0)发布版的主要特性)的一部分。本规范的标准内容将合并到JavaTM语言规范、JavaTM虚拟机规范以及java.lang包的类说明中。本JSR-133规范将不再通过JCP维护和修改。未来...
第一章 Java5.0新特性.......................94 第二章 基础知识.....96 第三章 泛型...........101 第四章 Annotation.102 XML学习笔记...............106 XML前言...............106 第一章 XML Overview..........
摘要:Java之所以得到很多程序员的青睐,除了她的严谨的面向对象特性外,还有一个不容轻视的因素,那...一门语言如果没有库,功能将会大打折扣,在JDK5.0版本中,其核心库也有了诸多的改进,本文将就其新特性进行简介。
2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.7.1.1. Jar包 2.7.1.2. XML配置 2.7.1.3. Deprecated的类和方法 2.7.1.4. Apache OJB 2.7.1.5. iBatis 2.8. 更新的样例应用 2.9. 改进的...
2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.2. ...
2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1. 容器 3.2.2. ...
2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1. 容器 3.2.2. ...
2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.2. ...
第一章 Java5.0新特性.......................94 第二章 基础知识.....96 第三章 泛型...........101 第四章 Annotation.102 XML学习笔记...............106 XML前言...............106 JavaEE@xuxiang 2 Java/...