Sed*_*nus 17 java enums coding-style
我发现Enum
s定义如下:
public Enum MyEnum {
ONE
{
@Override
public int getSomething() {
return 1;
}
},
TWO
{
@Override
public int getSomething() {
return 2;
}
}
int getSomething()
{
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
不知何故,我觉得这种实现有些不适,因为我认为理想情况下应该为此目的定义一个字段,类应该类似于:
public Enum MyEnum{
ONE(1),
TWO(2)
private int theSomething;
private MyEnum(int something) {
theSomething = something;
}
int getSomething()
{
return theSomething;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,除了个人的不适,我找不到任何改变此代码的充分理由.有存在吗?
Bri*_*ach 23
(从评论中移出)
您的第一个示例通常用于在Java中实现有限状态机.它消除了每个方法必须具有if (state == FOO) {} else if (state == BAR)
等的需要
class MyFSM {
enum State {
FIRST_STATE {
@Override
void start(MyFSM fsm) {
fsm.doStart();
}
@Override
void stop(MyFSM fsm) {
throw new IllegalStateException("Not Started!");
}
},
SECOND_STATE {
@Override
void start(MyFSM fsm) {
throw new IllegalStateException("Already Started!");
}
@Override
void stop(MyFSM fsm) {
fsm.doStop();
}
};
abstract void start(MyFSM fsm);
abstract void stop(MyFSM fsm);
}
private volatile State state = State.FIRST_STATE;
public synchronized void start() {
state.start(this);
}
private void doStart() {
state = SECOND_STATE;
}
public synchronized void stop() {
state.stop(this);
}
private void doStop() {
state = FIRST_STATE;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21985 次 |
最近记录: |