浏览 9075 次
锁定老帖子 主题:JDK5.0后的泛型程序设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-17
之前了解学习了C#的语言特征,的确,C#是很好的面向对象的语言,感觉很多跟JAVA大致相同,同时Microsoft给它新增了很多令人心动的特性,比如结构、泛型(这个跟C++的模板类似)、Foreach……这些都带来了很多方便。 JDK的更新日渐变化,越来完善的功能,给程序员带来很多便利。比如JDK5.0的泛型就是一个非常好的例子。下面讨论一下JAVA的泛型,仅供参考。 java 代码
这段代码中的ArrayLIst的get()方法是由继承Object来实现泛型的,所以在get()时必然要进行类型强制转换,可以查看JDK5.0以前的源程序,应该如下; java 代码
java 代码
java 代码[code]
通过<>内指定的类型参数,我们就可以很直观的知道List的类型,不需要强制的进行转换,避免了异常,编绎器也直接利用这个类型参数信息,能直接按类型参数处理,而且不是按Obejct来处理,相对更安全,同时编绎器会检查输入的类型是不是<>是指定的参数类型,如是要不是刚编绎无法通过,这当然要比在运行时异常要好啦。 泛型类的定义 要定义一个泛型类,其实也不是很难,下面我们定义一个有两个变量的泛型类。 [code] java 代码
[/code] 泛型方法的定义 java 代码
IClass接口中只有一个view()方法,实现查看的功能。先定义一个ClassTwo实现IClass接口中的泛型方法view()。 [code] java 代码
再看具体的ClassOne的实例调用 ,下面实例化ClassOne的类[code] java 代码
以上说明了定义泛型类和泛型方法,有点像C++的模板,但是又不相同,当然我上面只是简单的介绍一些特性,更多信息需要参考JDK的文档。 遍历特性(foreach) 下面再来说明一个JDK5.0的新特性,这个就是foreach,在C#语言中,经常看到这样的: c# 代码
C#代码的foreach{}非常方便的便遍历出ArrayList中的数据,并且不需要索引。而且JDK5.0以前需要进行如下: java 代码
java 代码
如果是用JDK5.0以上,则可以像C#中一样,用for直接遍历出数据,不需要指定索引。 [code] java 代码
上面说明了JDK5.0以后版本的两个新特性,其中都与C++和C#语言中的思想差不多,现在JDK6.0\7.0都快出来了,应该有更多让人惊喜的功能,比如听说会封装WebService的实现。的确是很期待的 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-08-17
JavaEye的HTML编辑器会把“<>”以及之间的内容替换掉,而泛型是的类型参数是用<>来定义的,所以这里用"[ ]"代表"<>"
具体问题已经跟管理员联系了 |
|
返回顶楼 | |
发表时间:2007-08-20
tvjody 写道: 泛型的优势 java 代码
这段代码中的ArrayLIst的get()方法是由继承Object来实现泛型的,所以在get()时必然要进行类型强制转换,可以查看JDK5.0以前的源程序,应该如下; java 代码
java 代码
java 代码[code]
通过<>内指定的类型参数,我们就可以很直观的知道List的类型,不需要强制的进行转换,避免了异常,编绎器也直接利用这个类型参数信息,能直接按类型参数处理,而且不是按Obejct来处理,相对更安全,同时编绎器会检查输入的类型是不是<>是指定的参数类型,如是要不是刚编绎无法通过,这当然要比在运行时异常要好啦。 |
|
返回顶楼 | |
发表时间:2007-08-21
List<String> list = new ArrayList<String>(); for(String str : list) { System.out.println(str); } 玩了一下这个,这个for循环如果我想判断是容器中的哪个元素怎么办? |
|
返回顶楼 | |
发表时间:2007-08-21
那你还是老老实实用原先那种循环
|
|
返回顶楼 | |
发表时间:2007-08-21
laiseeme 写道 那你还是老老实实用原先那种循环
看来只有如此了 |
|
返回顶楼 | |
发表时间:2007-08-21
Chamjoneu 写道 范性另一个大的优势在于解决了 不必要的装箱 和 拆箱 问题 java泛型不能减少box unbox,不允许List<int>,得用List<Integer> 而C#支持<int>这样的,虚拟机对这种值类型有优化,能减少box unbox |
|
返回顶楼 | |