我四处走动并尝试在开关盒中使用枚举。但很明显,我做错了什么。
这是我定义枚举的代码:
public class WorkoutStopwatch extends Activity implements OnClickListener {
private boolean timer_running = false;
public enum CounterState {
WORKOUT, REST
}
CounterState state;
以及我使用它的重写 onClick 方法:
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.start_button:
timer_running = true;
// Make call to timer update class to start
break;
case R.id.stop_button:
timer_running = false;
// Make call to timer update class to stop
break;
case R.id.reset_button:
if (!timer_running) {
switch(state) {
case WORKOUT:
// TODO: Reset the counter to the workout time
break;
case REST:
// TODO: Reset the counter to the rest time
break;
}
}
break;
}
}
当我运行我的程序时,启动和停止按钮的 onClick 调用工作得很好,但是重置按钮会导致应用程序崩溃,并出现指向开关行的“FATAL EXCEPTION: main”和“java.lang.NullPointerException”错误. 从我一直在阅读的内容来看,读取开关时枚举的值可能为空,因此我将枚举声明更改为:
private enum CounterState {
UNKNOWN(0),
WORKOUT(1),
REST(2);
private int stateValue;
CounterState(int state) {
this.stateValue = state;
}
public int getStateValue() {
return stateValue;
}
public void setStateValue(int state) {
this.stateValue = state;
}
}
CounterState state;
我同意,看起来像一个更完整的定义,但仍然存在问题。留下这样的代码并不能解决问题,读取时状态似乎仍然为空。在对象的声明中添加一个 int,如下所示:
CounterState state(0);
给我一个 Eclipse 错误“令牌“0”上的语法错误,删除此令牌”。所以我有点迷路了。据我所知,现在有一个枚举的构造函数,我应该能够传递一个 int 来初始化它在创建时的值,但这似乎不起作用。