日期:2014-05-17  浏览次数:20955 次

关于枚举的疑问
平时一般设置的都是静态常量,枚举用得极少,但枚举在有些情况下确实蛮不错的

关于这方面的疑问,如下:
1、大家平时枚举用得多不,就比如说:对于性别,一般用的是什么?枚举?或静态常量?
如果是枚举的话,那当页面同时须用到好多枚举的话,当import类时,不是引蛮多?而我用静态常量,只要引入那一个常量类就行?

2、页面中,枚举通过<%=%>可引用,但如何用EL表达式操作枚举?



------解决方案--------------------
我上一个项目,那些可以确定数量的属性全设置成了枚举类
在struts2标签中直接取
<s:property value='属性名'/>
但是有时候是这样,你存在数据库里的肯定是数字类型的或者字符串类型的(一般为英文)
那在页面如何让其显示中文,那就得
<s:if test="属性名.name()==''">

这个问题我搞了很久才搞出来
google了很久貌似都没答案


------解决方案--------------------
枚举俺用的不多,性别完全可以用0,1表示嘛
------解决方案--------------------
探讨

引用:
枚举俺用的不多,性别完全可以用0,1表示嘛


当然,但用枚举,可起到一个限定作用

------解决方案--------------------
探讨

我上一个项目,那些可以确定数量的属性全设置成了枚举类
在struts2标签中直接取
<s:property value='属性名'/>
但是有时候是这样,你存在数据库里的肯定是数字类型的或者字符串类型的(一般为英文)
那在页面如何让其显示中文,那就得
<s:if test="属性名.name()==''">

这个问题我搞了很久才搞出来
google了很久貌似都没答案

------解决方案--------------------
java枚举+Java注解可以解决了。
我们是通过这种方式来做的!
------解决方案--------------------
Java code

    public enum Sex{
        男,女
    }
//如果这样request.setAttribute("sex",Sex.男); 传至页面 而sex也是Enum类型。
//所以直接用${request.sex}取到的是Sex的Class无法显示。

//如果这样
public enum Sex{
    男,女;
    public String getLabel(){
        return super.toString();
    }
}
//所以直接用${request.sex.label}应该是能得到Sex的String值的。

------解决方案--------------------
常量的话我习惯用static final来搞
------解决方案--------------------
1.枚举类是很常用的。比如要制作一个动态显示图标的类。图标类型可以用枚举。这样,传入的类型就可以是枚举类型,在编译器就自动检查传入的是否是符合标准的图表类型。而不用像以前那样传入一个字符串,要到运行期才能知道传入的字符串对不对。
2.枚举的EL操作和一般的常量几乎没什么区别
${枚举类.内容}
上面应该会显示出序号
如果要显示出有意义的字
枚举的定义要稍微的改变下

网上查了下,key:类型安全枚举
Java code
public class EnumProvinces {
 
 private final String name;
 
 private EnumProvinces(String name){this.name = name;}
 
 public String toString() {return name;}

 
 public static final EnumProvinces 黑龙江   = new EnumProvinces("黑龙江省");
 public static final EnumProvinces 内蒙   = new EnumProvinces("内蒙古自治区");
 public static final EnumProvinces 新疆    = new EnumProvinces("新疆维吾尔自治区");
    ........
}

------解决方案--------------------
枚举这东西1.5才出来的用途不算很广
用struts 的ValueStack 应该可以取出来的
明白你的意思是限定,如果用request 取出来可能就失去了限定的意义(因为request 里面什么都可以放)
所以个人觉得ValueStack 应该比较好,对EL了解不够深等待……

------解决方案--------------------
探讨

枚举俺用的不多,性别完全可以用0,1表示嘛

------解决方案--------------------
操作枚举是永远有效的。只不过${枚举类.内容}打印不出来,但是${枚举类.内容 == 现在枚举类型},这个是可以返回true/false的。