Java中实现C++中的enum

原创 2008年02月14日 14:33:00
以下是我开通的JAVA论坛,欢迎光临^_^
http://groups.google.com/group/roofalison/browse_thread/thread/ecd6ca274fdcab8e

感谢Nubix提醒我,原来Java已经有enum了,可能我手头的书和编译器是基于1.4的,没有看到,呵呵,不过下面的东西看看无妨。
C++里的enum有两个特性:
1、静态、常量特性。
2、类型检查。
对于第一个,即是一旦定义了enum,内部数据将不可被修改,且也定义了存储空间,这在Java里当然是很容易实现的。
现在以“星期”类型为例:
对C++而言,可以这么定义:
enum Week {
  MON = 1,
  WED = 2,
  TUE = 3,
  THU = 4,
  FRI = 5,
  SAT = 6,
  SUN = 7
};
如果在Java中只实现enum第一个特性,那么可以用接口实现:
public interface Week {
    int MON = 1,
        WED = 2,
        TUE = 3,
        THU = 4,
        FRI = 5,
        SAT = 6,
        SUN = 7;
}
由于接口使得内部数据默认强制为public static final类型,所以第一个特性可以轻易实现,但它不能实现第二个特性 --- 对于enum来说,赋值操作只能针对同一个类型,但对于Java的接口实现,由于内部成员类型为int,那么毫无疑问我们可以写int s = Week.MON + Week.WED; 这样的操作,这不是合理的权限,所以我们必须对此做出限制。
以下做法更好的实现了类型检查,防止了Week类型有不必要的权限,以此获得实现C++中enum的效果:
// 使Week为final类型,这样它就不可继承
public final class Week {
    public static void main(String[] args) {
        Week day = Week.MON;
        day = Week.FRI;
    }
   
    public String toString() {
        return _name;
    }
    //
    public final static Week MON = new Week("Monday");
    public final static Week TUE = new Week("Tuesday");
    public final static Week WED = new Week("Wednesday");
    public final static Week THU = new Week("Thusday");
    public final static Week FRI = new Week("Friday");
    public final static Week SAT = new Week("Saturday");
    public final static Week SUN = new Week("Sunday");
    // 将构造方法修饰为private,这样用户不能任意new自己想要的Week,所以Week的成员限定为以上有限的七个
    private Week(String aName) {
        _name = aName;
    }
    private String _name;
}
参考自:《thinking in java》
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ 模拟C#/Java中的检举(enum)类型

在C++中enum类型仅仅相当于一系列的整数常量,如果要在日志中显示或标准输出打印时需要把整数与一个字符串对应起来,从配置文件中读取时为了配置文件的可读性最好配置的是字符串名称而不是数字,使用enum...
  • Nocky
  • Nocky
  • 2011-04-11 15:06
  • 1183

14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记

本章目标: 1

Java枚举enum以及应用:枚举实现单例模式

枚举作为一个常规的语言概念,一直到Java5才诞生不得不说有点奇怪,以至于到现在为止很多程序员仍然更喜欢用static final的形式去命名常量而不使用,一般情况下,Java程序员用这种方式去实现枚...

Java enum 枚举类的编译实现

本文探讨一下enum枚举类和普通的class有什么区别,在编译时又有什么不同。 并详细分析枚举的编译

C# C++ enum 枚举 例子.rar

【C++】尽量以const,enum,inline 替换 #define

尽量以const,enum,inline 替换 #define

Java Enum使用Demo源码

java枚举类型enum的使用

《Effective C++》条款02:尽量以const,enum,inline替换#define

1. 宏定义   #define ASPECT_RATIO 1.653 该宏定义ASPECT_RATIO也许从未被编译器看见,也许在编译器开始处理源代码之前就被预处理器替换了。我们知...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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