正 文

体验Java 5.0的新增语言特性


www.7dspace.com  更新日期:2006-1-7 3:40:33  七度空间


  Java 5.0发布了,许多人都将开始使用这个JDK版本的一些新增特性。从增强的for循环到诸如泛型(generic)之类更复杂的特性,都将很快出现在您所编写的代码中。我们刚刚完成了一个基于Java 5.0的大型任务,而本文就是要介绍我们使用这些新特性的体验。本文不是一篇入门性的文章,而是对这些特性以及它们所产生的影响的深入介绍,同时还给出了一些在项目中更有效地使用这些特性的技巧。

  简介

  在JDK 1.5的beta阶段,我们为BEA的Java IDE开发了一个Java 5编译器。因为我们实现了许多新特性,所以人们开始以新的方式利用它们;有些用法很聪明,而有些用法明显应该被列入禁用清单。编译器本身使用了新的语言特性,所以我们也获得了使用这些特性维护代码的直接体验。本文将介绍其中的许多特性和使用它们的体验。

  我们假定您已经熟悉了这些新特性,所以不再全面介绍每个特性,而是谈论一些有趣的、但很可能不太明显的内容和用法。这些技巧出自我们的实际体验,并大致按照语言特性进行了分类。

  我们将从最简单的特性开始,逐步过渡到高级特性。泛型所包含的内容特别丰富,因此占了本文一半的篇幅。

  增强的for循环

  为了迭代集合和数组,增强的for循环提供了一个简单、兼容的语法。有两点值得一提:

  Init表达式

  在循环中,初始化表达式只计算一次。这意味着您通常可以移除一个变量声明。在这个例子中,我们必须创建一个整型数组来保存computeNumbers ()的结果,以防止每一次循环都重新计算该方法。您可以看到,下面的代码要比上面的代码整洁一些,并且没有泄露变量numbers:

  未增强的For:

  int sum = 0;
  Integer[] numbers = computeNumbers();
  for (int i=0; i < numbers.length ; i++)
    sum += numbers[i];

  增强后的For:

   int sum = 0;

  for ( int number: computeNumbers() )
    sum += number;

  局限性

  有时需要在迭代期间访问迭代器或下标,看起来增强的for循环应该允许该操作,但事实上不是这样,请看下面的例子:

for (int i=0; i < numbers.length ; i++) {
    if (i != 0) System.out.print(",");
    System.out.print(numbers[i]);
}

  我们希望将数组中的值打印为一个用逗号分隔的清单。我们需要知道目前是否是第一项,以便确定是否应该打印逗号。使用增强的for循环是无法获知这种信息的。我们需要自己保留一个下标或一个布尔值来指示是否经过了第一项。   这是另一个例子:

for (Iterator<integer> it = n.iterator() ; it.hasNext() ; )
    if (it.next() < 0)
        it.remove();

  在此例中,我们想从整数集合中删除负数项。为此,需要对迭代器调用一个方法,但是当使用增强的for 循环时,迭代器对我们来说是看不到的。因此,我们只能使用Java 5之前版本的迭代方法。  顺便说一下,这里需要注意的是,由于Iterator是泛型,所以其声明是Iterator<Integer>。许多人都忘记了这一点而使用了Iterator的原始格式。

3页,页码:[1] [2] [3] 

上一篇:它是最适合的 我热爱Spring的五个理由
下一篇:.NET可复用TCP通信层之消息分派器组件
作者:Jess Garms, Tim Hanson  来源:bea ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐