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++中enum的使用

C++中enum的使用
  • fengbingchun
  • fengbingchun
  • 2016年06月28日 21:39
  • 5623

C/C++中enum用法

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。   举个例子来说明一吧,为了让大家更明白一点,比如一...
  • mal327
  • mal327
  • 2011年05月12日 16:25
  • 11129

初探C++ 类中enum关键字的使用

enum关键字
  • wxwd1
  • wxwd1
  • 2014年07月23日 17:29
  • 1898

多路分发-枚举类型

java只支持单路并发
  • Asmots
  • Asmots
  • 2014年11月13日 10:19
  • 714

动态生成enum(dynamic enum)

因为以前的老代码定义了enum类,而这部分代码是作为公共的jar,修改时会影响很大,所以希望动态添加枚举属性 首先是一个工具类DynamicEnumUtil ,参考网上的: 原文链接: ht...
  • jinfeiteng2008
  • jinfeiteng2008
  • 2017年01月04日 15:09
  • 452

C++中的enum

enum
  • jerryzcx
  • jerryzcx
  • 2014年02月17日 23:55
  • 1220

c++ enum类型常量

enum test{one,two,three,four,five}; 如上为一个enum枚举类型的常量声明,枚举test中有5个值,若此处不给他们赋值,则他们的值为0,1,2,3,4,看起来,就类似...
  • godwillcry
  • godwillcry
  • 2015年08月02日 17:14
  • 470

C++学习之enum类型

ENUM概况enum枚举类型是C/C++中的一种数据类型,与struct和class一样是用户自定义的类型,其特点在于enum类型的变量取值是有限的,是可以一一列举出来的。 ENUM定义C++ enu...
  • xywlpo
  • xywlpo
  • 2011年05月30日 09:52
  • 34669

Java 中Enum 的扩展

Java 原生的Enum没有办法与C中的Enum一样随意指定成员的值,在一些C语言直接与Java 通信的场景中会比较麻烦,所以我对Java 原有的Enum进行扩展来达到随意指定成员值的目的:   pu...
  • chenjianjk
  • chenjianjk
  • 2013年07月30日 21:09
  • 1204

C++ 枚举声明 enum 和 enum class

枚举是用户定义的类型,其中包含一组称为枚举器的命名的整型常数。  说明 本文包含 ISO 标准 C++ 语言 enum 类型和 C++11 中引入的范围(或强类...
  • tianxiawuzhei
  • tianxiawuzhei
  • 2015年04月10日 15:05
  • 17517
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中实现C++中的enum
举报原因:
原因补充:

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