A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张森 中级黑马   /  2013-1-30 01:21  /  5992 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看张老师的枚举这节视频,枚举的主要作用就是在编译的时候可以强制赋值类型的范围。比如

public enum Color {
        RED,GREEN,BLUE;
        private Color(){}
}

public class Demo(){
     Color c = Color.RED;
}
这里就强行规定Color的值类型必须是Color这个枚举类里面定义的属性之一。

那么用静态常量属性也可以搞定
public  class Color(){
    private static final String COLOR_RED="red";
}
public class Demo(){
   String color = Color.COLOR_RED;
}

就代码上面看,两者的区别在于用枚举的话把所有类型单独封装成了一个类(COLOR)
而用静态常量属性的看,他并没有把类型封装成一个类,他只是把要返回的具体数值封装到了一个静态常量类里面。
但这两者都可以达到对赋值的范围控制。
所以我想请教的就是除了上面的代码形式不一样外,他们到底还有什么区别,他们的优劣势在什么地方。








评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 黄锦成 于 2013-1-30 10:02 编辑

使用枚举,它强制性规定了你只能使用哪几个值
public class Demo(){
     Color c = Color.RED;
}
在这个代码里,也规定了c的类型是Color,你只能为它赋一个Color类的一个对象,赋枚举以外的都会报错
----------------------------------------------------------------------------------------------------------------------------------------
public  class Color(){
    private static final String COLOR_RED="red";
}
public class Demo(){
   String color = Color.COLOR_RED;
}
在这个代码中,color是String,我可以不用常量,直接写String color = "hello world";编译器也不报错,但是运行结果就会出现偏差甚至error

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
搜索结果如下:
枚举与静态常量比较

静态常量是枚举模式的应用
它有很多缺点:类型不安全(静态常量可以随意增加使用或操作),无命名空间,脆弱(某常量值改变后客户端如果不编译仍能使用,但表现却是未定义的),静态常量打印值为数字,也不具提示性等等

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马