私は四肢に出て、スイッチケースで Enum を使用しようとしました。しかし、明らかに、私は何か間違ったことをしています。
Enumを定義するコードは次のとおりです。
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" エラーでアプリケーションがクラッシュします。 . 私が読んだことから、スイッチを読み取るときに列挙型の値がnullである可能性が高いと思われるため、列挙型宣言を次のように変更しました。
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;
より完全な定義のように見えますが、まだ問題が見られます。このようなコードを残しても問題は解決しませんでした。読み取り時に状態が null だったようです。次のように、オブジェクトの宣言に int を追加します。
CounterState state(0);
「トークン "0" の構文エラー、このトークンを削除してください」という Eclipse エラーが表示されます。だから私は少し迷っています。私が言えることから、列挙型のコンストラクターがあり、作成時に値を初期化するために int を渡すことができるはずですが、うまくいかないようです。