J2SE1.5的新特点(之二)

原创 2003年05月27日 11:14:00

J2SE1.5的新特点(之二)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-5-151947490.gif 类型安全的枚举比以前的枚举有什么优点呢?

CSDN_Dev_Image_2003-5-151947492.gif有如下特点:

  • 提供编译时int枚举的安全检查,同时不再提供其他类型安全检查。

  • 提供了枚举的命名空间

  • 可以直接把它们放到集合中。

  • 因为他们本质上是类,你可以向里面添加属性和方法。

CSDN_Dev_Image_2003-5-151947490.gif上面的这些特点的确不错。能讲讲类型安全的枚举语言的特点和类型安全的枚举模式的关系吗?

CSDN_Dev_Image_2003-5-151947492.gif 一般来说:上面的那些特点简单的从语义上支持了模式。看下面的例子,和C/C++ 枚举的声明很相似:

    enum Season { winter, spring, summer, fall }

声明虽然相似,但是确让编译器实现了上面提到的许多特性。你还可以把Season用到switch的判断语句中。

CSDN_Dev_Image_2003-5-151947490.gif 请举例说明“类型安全的枚举”的优点。

CSDN_Dev_Image_2003-5-151947492.gif 下面是一个表示每分枚举类型的例子。

public enum Coin {

    penny(1), nickel(5), dime(10), quarter(25);

    Coin(int value) { this.value = value; }

    private final int value;

    public int value() { return value; }

}

这是个创举。我们定义了value来作为读取Coin的公共变量。在枚举的构造函数中可以在声明枚举实例的时候来初始化它。

CSDN_Dev_Image_2003-5-151947490.gif让我们看看进一步使用这个枚举的例子。

CSDN_Dev_Image_2003-5-151947492.gif我把不的呢。下面的程序打印一个表格和其中coin的大小和颜色。

public class CoinTest {

    public static void main(String[] args) {

        for (Coin c : Coin.VALUES)

            System.out.println(c + ":   /t"

                  + c.value() +"¢ /t" + color(c));

    }

    private enum CoinColor { copper, nickel, silver }

    private static CoinColor color(Coin c) {

        switch(c) {

          case Coin.penny:   return CoinColor.copper;

          case Coin.nickel:  return CoinColor.nickel;

          case Coin.dime:

          case Coin.quarter: return CoinColor.silver;

          default: throw new AssertionError("Unknown coin: " + c);

        }

    }

}

CSDN_Dev_Image_2003-5-151947490.gif太帮了。那么静态引入static import 的功能对程序员有什么帮助呢?

CSDN_Dev_Image_2003-5-151947492.gif 首先他避免了程序员使用前缀的静态成员。以前常见的的一个替代的做法是:

// "Constant Interface" antipattern – 不推荐的做法

public interface Physics {

  public static final double AVOGADROS_NUMBER   = 6.02214199e23;

  public static final double BOLTZMANN_CONSTANT = 1.3806503e-23;

  public static final double ELECTRON_MASS      = 9.10938188e-31;

}

 

public class Guacamole implements Physics {

    public static void main(String[] args) {

        double moles = ...;

        double molecules = AVOGADROS_NUMBER * moles;

        ...

    }

}

上面的做法达到了效果,可是却违背了一些设计原则。接口是用来定义方法和类型的,不是提供常量声明的。而且只是由Guacamole使用的常量也暴露给了使用其的客户端。

静态引入功能提供了一个简单的实现。这个功能和包的import功能类似。

import static org.iso.Physics.*;

 

class Guacamole {

    public static void main(String[] args) {

        double molecules = AVOGADROS_NUMBER * moles;

        ...

    }

}

CSDN_Dev_Image_2003-5-151947490.gif 明白,那么什么是元数据类型metadata的功能呢?

CSDN_Dev_Image_2003-5-151947492.gif 使用metadata和第三方工具提供商可以让程序员自己的日子好过点。

以前许多发布API需要大量的描述信息。比如:定义一个JAX-RPC 网络服务API你需要提供其接口和实现类。如下:

public interface CoffeeOrderIF extends java.rmi.Remote {

    public Coffee [] getPriceList()

        throws java.rmi.RemoteException;

    public String orderCoffee(String name, int quantity)

        throws java.rmi.RemoteException;

}

 

public class CoffeeOrderImpl implements CoffeeOrderIF {

    public Coffee [] getPriceList() {

        ...

    }

    public String orderCoffee(String name, int quantity) {

        ...

   }

}

使用元数据功能,你可以节省大量的工作。你所需要做的是在代码上加上特殊的注释。你所使用的开发工具可是使用这些注释自动生成相关的代吗。如下所示:

import javax.xml.rpc.*;

 

public class CoffeeOrder {

    @Remote public Coffee [] getPriceList() {

        ...

    }

    @Remote public String orderCoffee(String name, int quantity) {

        ...

    }

}

 

CSDN_Dev_Image_2003-5-151947490.gif  的确非常好,可是我们不可能定义所有的属性和注释呀?

CSDN_Dev_Image_2003-5-151947492.gif

是的,但是 JSR-175  现在提供了一个 framework 让第三方来定义属性和相关的工具。

全文完

==============

有些地方翻译的不准确希望大家原谅

accesine@163.com

==============

版权声明:本文为博主原创文章,在不删除、修改文章内容的情况下,可以自由转载。

J2SE1.5的新特点(之一)

J2SE1.5的新特点 J2SE 的下一个版本名字叫“Tiger”在让程序员的代码更清楚、更短、更安全,更加容易开发的情况下不损失其兼容性。 请你简单谈谈J2SE 1.5 的优点。    新的java...
  • accesine960
  • accesine960
  • 2003年05月27日 11:23
  • 1486

更新maven依赖时 项目默j2SE1.5版本

只需要在maven项目的pom.xml中将编译器的版本指定为1.8即可 代码如下 org.apache.maven.plugins ...
  • u012156858
  • u012156858
  • 2017年02月06日 16:09
  • 2124

SQL Server 2005的30个最重要特点

数据库管理10个最重要的特点 特点 描述 ...
  • webor
  • webor
  • 2006年11月16日 22:53
  • 297

sdut oj3340 数据结构实验之二叉树一:树的同构

题目链接:点击打开链接 数据结构实验之二叉树一:树的同构 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定两棵树T1和T2。如果T1可以...
  • Annfan123
  • Annfan123
  • 2016年08月11日 09:19
  • 262

3340 数据结构实验之二叉树一:树的同构

数据结构实验之二叉树一:树的同构#include using namespace std; struct tree { char c; struct tree *l...
  • yue_luo_
  • yue_luo_
  • 2016年11月25日 14:18
  • 146

[hdu-2042] 不容易系列之二

不容易系列之二 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...
  • u011506951
  • u011506951
  • 2014年04月28日 18:15
  • 794

移动互联网时代的新特点

两次世界大战之后开始的第三次工业革命创了“信息时代”(1950-),全球信息和资源交流变得更为迅速,大多数国家和地区都被卷入到全球化进程之中,世界政治经济格局进一步确立,人类文明的发达程度也达到空前的...
  • computerme
  • computerme
  • 2014年09月25日 14:50
  • 2195

sdut oj3341 数据结构实验之二叉树二:遍历二叉树

题目链接:点击打开链接 数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知二叉树的一个按...
  • Annfan123
  • Annfan123
  • 2016年08月08日 16:26
  • 421

数据结构二叉树遍历之中序遍历

中序遍历的递归实现 中序遍历指的是先访问二叉树中节点的左孩子,再访问当前节点,最后再访问其右孩子,具体访问步骤如下:1、首先访问根节点,判断根节点是否有左孩子,如果有,进行第二步;如果没有,跳到第三...
  • chongshangyunxiao321
  • chongshangyunxiao321
  • 2016年04月04日 14:04
  • 358

数据结构实验之二叉树三:统计叶子数

数据结构实验之二叉树三:统计叶子数 Time Limit: 1000MS Memory limit: 65536K 题目描述 已知二叉树的一个按先序遍历输入的字符序列,如ab...
  • guoqingshuang
  • guoqingshuang
  • 2015年11月08日 11:37
  • 2066
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2SE1.5的新特点(之二)
举报原因:
原因补充:

(最多只允许输入30个字)