枚举设计

枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性。枚举分为简单枚举和标志枚举两种。简单枚举包含的值不用于组合,也不用于按位比较。标志枚举应使用按位 OR 操作进行组合。标志枚举值的组合使用按位 AND 操作检查。

下列指南介绍了枚举设计的最佳做法。

一定要使用枚举强类型化参数、属性和表示值集的返回值。
一定要优选使用枚举而不是静态常量。

下面的代码示例演示了不正确的设计。

   1: public static class BadFurnishings
   2: {
   3:     public static int Table = 1;
   4:     public static int Chair = 2;
   5:     public static int Lamp = 3;
   6: }


下面的代码示例演示应使用来代替静态常量的枚举。

   1: public enum GoodFurnishings
   2: {
   3:     Table,
   4:     Chair,
   5:     Lamp
   6: }

不要对开放集(如操作系统版本)使用枚举。

向已提供的枚举添加值会中断现有代码。有时可以接受这种做法,但不应在可能出现这种情况的场合设计枚举。

不要定义供将来使用的保留枚举值。

某些情况下,您可能认为为了向提供的枚举添加值,值得冒可能中断现有代码的风险。还可以定义使用其值的新的枚举和成员。

避免公开只有一个值的枚举。
一定不要将 sentinel 值包括在枚举中。

Sentinel 值用于标识枚举中的值的边界。通常,sentinel 值用于范围检查,它不是一个有效的数据值。下面的代码示例定义一个带有 sentinel 值的枚举。

   1: public enum Furniture
   2: {
   3:     Desk,
   4:     Chair,
   5:     Lamp,
   6:     Rug,
   7:     LastValue   // The sentinel value.
   8: }
   9:  
posted @ 2010-04-01 00:16  Gang.Wang  阅读(558)  评论(0编辑  收藏  举报