zoukankan      html  css  js  c++  java
  • 枚举设计

    枚举提供成组的常数值,它们有助于使成员成为强类型以及提高代码的可读性。枚举分为简单枚举和标志枚举两种。简单枚举包含的值不用于组合,也不用于按位比较。标志枚举应使用按位 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:  
     


    作者:GangWang
    出处:http://www.cnblogs.com/GnagWang/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    拦截器-监听器-过滤器的区别
    实例Rest风格+SpringMVC+中文乱码解决
    Nginx功能详细介绍(大而全)
    Nginx应⽤场景之反向代理
    SpringMVC参数传递之日期类型
    SpringMVC请求参数绑定回顾
    数据输出机制之Model、Map及ModelMap回顾
    ReactHook快速上车
    Chrome性能调优技巧
    移动端适配的最佳实践
  • 原文地址:https://www.cnblogs.com/GnagWang/p/1701869.html
Copyright © 2011-2022 走看看