- 浏览: 1543672 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 2153https://www.microfocus. ... -
(转)Determining equivalent SQL and COBOL data types
2011-08-24 18:01 1482http://publib.boulder.ibm ... -
(转)grep Programs and Regular expressions
2011-08-10 13:10 1214http://ss64.com/bash/grep-r ... -
(转)find:根据指定条件查找文件
2011-08-10 11:34 1028http://man.ddvip.com/ ... -
(转)[红旗] 手动可以执行,加入crontab 就不行了
2011-07-05 13:07 1803http://bbs.chinaunix.net ... -
(转)Linux——计划任务管理
2011-07-04 15:02 1566http://hi.baidu.com/%BA%CE%B4 ... -
(转)CentOS的计划任务,Crontab安装及使用方法
2011-07-04 15:01 3102http://www.hitsword.org/re ... -
(转)Windows如何压缩tar.gz格式
2011-05-11 10:34 1268http://www.viosem.com/2008/ ... -
(转)日语的文字编码
2011-03-02 10:23 1646http://blog.csdn.net/jackyren ... -
(转)《软件工程的事实与谬论》
2010-11-04 09:57 1684http://book.group.iteye.com ... -
(转)VB6迁移到VB.NET的一些问题汇总
2010-11-03 15:02 1812http://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 5669http://hi.baidu.com/grape17/b ... -
Top Ten TPC-E by Performance
2009-10-21 14:50 1039http://www.tpc.org/tpc ... -
IBM DB2 UDB 和 SQL Server 2000
2009-10-21 14:49 1357http://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 3536http://soft.yesky.com/0/30685 ... -
Java 内存溢出的可能性汇总
2009-02-18 13:42 15681 分配的内存太小, 请使用 JVM 参数设置更大的可用内存 ... -
Java web应用内存溢出 [已结帖,结帖人:pengble]
2009-02-18 13:40 2277加为好友发送私信在线聊天
相关推荐
1. **Generic(泛型)**:Java 5.0引入了泛型,允许在类、接口和方法中定义类型参数,从而增强了类型安全性和代码可读性。泛型帮助我们在编译时检查类型错误,避免了强制类型转换,并且可以实现更高效的代码复用。 ...
《Java 5.0 Tiger》是一本针对Java编程语言5.0版本的权威指南,尤其对Tiger(Java 5.0的代号)引入的新特性进行了深入的讲解。这本书的源码是学习和理解Java 5.0新特性的宝贵资源,包括泛型、枚举、自动装箱与拆箱、...
Java 5.0最重要的特性之一就是泛型,它允许在类、接口和方法声明中使用类型参数,从而增强了类型安全性和代码重用。泛型可以减少运行时类型转换的需要,避免了强制类型转换可能导致的ClassCastException。通过使用...
《Java 5.0 Tiger程序高手秘笈》是一本针对Java 5.0(也称为Java SE 5.0)的高级开发指南,其核心目标是帮助开发者掌握Tiger版本中的新特性和优化技术,从而提升编程技能和实战能力。在Java 5.0中,许多重要的更新和...
本书《Java5.0 Tiger程序高手秘笈》正是为了帮助开发者掌握这些新特性而编写,结合源码分析,将有助于深入理解Java 5.0的核心改进。 1. **泛型**:Java 5.0引入了泛型,这是一种类型安全机制,允许在编译时检查类型...
这个"Java5.0 Tiger全书代码.rar"压缩包包含的是《Java5.0 Tiger程序员高手秘笈》这本书的配套源码,这是一本深受Java开发者喜爱的进阶指南,旨在帮助读者深入理解Java 5.0的新特性和最佳实践。 首先,Java 5.0的...
该书可能涵盖了Java 5.0的新特性、核心概念以及高级编程技巧。以下是对书中可能涉及的知识点的详细解析: 1. **泛型**:Java 5.0引入了泛型,允许在编译时检查类型安全,减少强制类型转换,并提供更好的代码重用。...
总的来说,《JAVA 5.0 TIGER程序高手秘笈》这本书全面讲解了Java 5.0的新特性,包括泛型、枚举、注解、并发工具、增强的循环和类型系统等,是Java开发者进阶学习的重要参考资料。通过深入学习和实践,开发者可以提升...
《Java5.0 Tiger程序高手秘笈》是针对Java 5.0(也称为Tiger版本)这一里程...通过深入理解和熟练运用这些特性,开发者能够编写出更加高效、可靠的Java程序,这也是《Java5.0 Tiger程序高手秘笈》所要传授的核心技能。
《Java 5.0 Tiger 程序高手秘笈》是一本专为Java程序员设计的进阶学习资料,旨在帮助读者深入理解Java 5.0(也被称为Tiger)版本的新特性和高级编程技巧。Java 5.0是Java发展历程中的一个重要里程碑,引入了许多关键...
JDK 1.5,代号“Tiger”,也被称为Java 5.0,引入了一系列重大的语言和库改进,显著提升了开发效率和代码质量。本文将深入探讨这些新特性,分享实际应用中的经验和技巧。 首先,让我们从增强的for循环开始。这种新...
2. **泛型(Generics)**:泛型是Java 5.0的一个核心特性,允许在类、接口和方法中声明类型参数,增强了类型安全性。源代码中会包含各种泛型容器类(如ArrayList、HashMap等)的实例,以及泛型方法的使用。 3. **...
7. **兼容性**:"tiger"指的是Java SE 5.0,表明该版本的Acegi Security与Java 5的特性兼容。 "acegi-security--license.txt"文件通常是开源软件的许可证文件,其中包含了该软件的使用条款和条件,比如Apache ...
总之,《Java5.0 Tiger》书籍的源码对于学习和掌握Java 5.0的新特性是极其宝贵的资源,它将理论与实践相结合,帮助程序员成为真正的Java高手。通过探索和研究这些代码,开发者不仅可以巩固语言基础,还能提升解决...
【Core Java Part III】是达内教育集团提供的一份关于Java高级编程的培训课件,主要涵盖了Java 5.0(也称为Tiger)的新特性和设计原则。这份课件强调了达内教育在IT培训中的高质量、稳定性和兼容性,旨在提升学员的...
随着Tiger(Java SE 5.0)的发布,Java引入了一系列重要的语言改进,如泛型、枚举类型、增强的for循环、静态导入等。这些变化不仅简化了代码,还提升了程序的性能和安全性。 ### 循环结构的增强 增强的for循环,也...
**Tiger版本**:Tiger通常指的是Java SE 5.0,也被称为Java Tiger,这是一个重要的Java版本,引入了泛型、枚举、变量类型注解等新特性。Acegi Security的Tiger版本可能特别针对这些新特性进行了优化和调整。 **...