开发者社区> 问答> 正文

一个关于枚举类型的问题?

实体对象中,一些属性只能是某些特定的值,如果不属于这些值
就不能保存,比如用户的性别这个属性,只能是"male"或者"female"
为此我们定义了一个枚举类型:

public enum Sex{
    male,         
    female;         
    private final String value;
    
    Sex(String value) {
        this.value = value;
        }

}

然后在实体类User中,我们就可以使用Sex这个类来限制不符合规定的赋值了

@Entity()
@Table(name = "user")
public class User(){
    private Sex sex
    ......
    @Enumerated(EnumType.STRING)
    public Sex getSex() {
        return sex;
    }
    ......
}

这样,User的sex属性就只能输入"male"或者"female"了
但是,我们是非英语国家,sex这个属性我们只能输入"男"或者女.
这时候该怎么办呢?
Sex这个枚举类型应该这样定义吗?

public enum Sex{
    男,         
    女;         
    private final String value;
    
    Sex(String value) {
        this.value = value;
        }     
}

展开
收起
蛮大人123 2016-02-22 14:59:35 2224 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    Java 的枚举类型与其它语言的枚举类型不同,它是一个类,所以可以定义构造方法,也可以定义自己的实例方法和静态方法,比如,可以按如下定义,来输出中文的“男”、“女”。

    public class Test {
        public enum Sex {
            Male("男"),
            Female("女");
    
            private final String chinese;
    
            Sex(String value) {
                chinese = value;
            }
    
            @Override
            public String toString() {
                return chinese;
            }
        }
    
        public static void main(String[] args) {
            System.out.println(Sex.Male);
            System.out.println(Sex.Female);
        }
    }

    如果对上面的 toString() 加个国际化处理,就可以适应多种语言的输出了。
    在输入的时候也可以,写一个静态的 parse 函数来实现中文输入

    public class Test {
        public enum Sex {
            Male("男"),
            Female("女");
    
            private final String chinese;
    
            Sex(String value) {
                chinese = value;
            }
    
            @Override
            public String toString() {
                return chinese;
            }
    
            public static Sex parse(String v) {
                if ("男".equals(v)){
                    return Male;
                } else if ("女".equals(v)) {
                    return Female;
                } else {
                    throw new RuntimeException("不男不女是啥");
                }
            }
        }
    
        public static void main(String[] args) {
            Sex male = Sex.parse("女");
            System.out.println(male == Sex.Female);
            System.out.println(male.toString());
        }
    }
    2019-07-17 18:46:42
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载