作者Reder (Reder)
看板java
标题Re: [J2SE] enum应用问题
时间Sun Mar 13 15:06:34 2011
我个人是 enum 的爱好者 XD
我是觉得,你的函式的宣告应该要能够表达你这个函式能够接受的参数,
所以用 updateStatus(String id, Status status) 会比较好,
这样要使用这个函式的人就知道你有参数上的限制。
※ 引述《KevinGet (就算我换了ID)》之铭言:
: 问题不是在於其他程式能不能用 其他程式当然是可以使用ENUM
: 我想看看大家有没有比较好的设计想法建议我
: -----------------------------------------
: 举个例子
: Web系统的修改使用者状态
: 使用者状态有两种值 open/close
: 原本设计提供这种方法 updateStatus(String id,String Status)
: 前端可能是一个表单 有下拉选单或Radio Box
: 所以传入後端是
: String id
: String status //value is open/close
基本上目前比较新的 web framework 都应该要支援 enum 的转换,
也就是你後端的 vo 直接写 Status status 他就会帮你塞好。
如果没有的话,应该就要丢掉… 啊不是,
应该要自己写 converter 。(我有写过 Struts1 可以用的 converter )
: ****第一种写法***********
: 程式可能会呼叫
: updateStatus(id,status);
: 但是如果要处理当status值不在预期内的情况 那就需要做检查
: 但是用一般判断式检查String 以後status要增加或更改 那要加写程式
: 所以我想到改利用Enum做检查 以後维护修改都很方便
: ****第二种写法***********
: 但是如果提供的方法改成
: updateStatus(String id,Status status)
: 那就可能会呼叫
: updateStatus(id,Status.valueOf(status));
: 但这样有可能会抛出例外 如果该页PG撰写者没有处理 那系统就会停在这
这个状况只会发生在开发时期或者是 Status 变动,
那麽该页 PG 撰写者一定得处理这个问题,
所以我觉得不是大问题。
(事实上爆炸了反而好,就是知道该处理了)
: 他当然是可以直接使用enum
: 但是他必须还加写判断传入的status值 他才知道要传入哪个ENUM 不是吗?
: 可能变成这样
: if(status.equals(Status.open)){
: updateStatus(id.Status.open);
: }else if(status.equals(Status.close)){
: updateStatus(id,Status.close);
: }else if(...){
: ....
: ...
: 以後要加status 就要加写判断
: 状态越多 程式会越来越长
: 而且这些是散落在各处呼叫这之程式的地方
: 可能就会有N份 相同的程式
: 只是为了判断要传入哪个ENUM值
所以只应该用 valueOf() 来做转换,如果没有自然会抛出错误。
附带一提的是跟 enum 关系最好的是 switch 不是 if else 喔,
你可以这样写:
switch(status){
case open:
// do something when open
break;
case close:
// do something when close
break;
default: throw new IllegalArgumentException("The handler of this status does not exist.");
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.216.200