[解決済み] Java Enum Methods - 逆方向のenumを返す
2022-05-16 05:19:39
質問
Directionという名前の列挙型を宣言し、その列挙型に反対の方向を返すメソッドを持たせたいと考えています(以下は構文的には正しくありません。) これはJavaで可能ですか?
以下はそのコードです。
public enum Direction {
NORTH(1),
SOUTH(-1),
EAST(-2),
WEST(2);
Direction(int code){
this.code=code;
}
protected int code;
public int getCode() {
return this.code;
}
static Direction getOppositeDirection(Direction d){
return new Direction(d.getCode() * -1);
}
}
どのように解決するのですか?
タイトルに惹かれてここに来た人のために: はい、enum に独自のメソッドを定義することができます。そのような非静的メソッドをどのように呼び出すか悩んでいるなら、他の非静的メソッドと同じように行います - そのメソッドを定義または継承する型のインスタンスで呼び出すのです。列挙型の場合、そのようなインスタンスは単に
ENUM_CONSTANT
s.
つまり、必要なのは
EnumType.ENUM_CONSTANT.methodName(arguments)
.
さて、質問から問題に戻りましょう。解決策の1つは
public enum Direction {
NORTH, SOUTH, EAST, WEST;
private Direction opposite;
static {
NORTH.opposite = SOUTH;
SOUTH.opposite = NORTH;
EAST.opposite = WEST;
WEST.opposite = EAST;
}
public Direction getOppositeDirection() {
return opposite;
}
}
現在
Direction.NORTH.getOppositeDirection()
は
Direction.SOUTH
.
もう少しハチャメチャに説明します。 jedwards のコメント が、フィールドを追加したり順序を変えたりするとコードが壊れてしまうので、最初のアプローチほど柔軟性があるとは思えません。
public enum Direction {
NORTH, EAST, SOUTH, WEST;
// cached values to avoid recreating such array each time method is called
private static final Direction[] VALUES = values();
public Direction getOppositeDirection() {
return VALUES[(ordinal() + 2) % 4];
}
}
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
javaの非静的メソッドを静的に参照することができない
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] enumを列挙するには
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Javaでよくある構文エラー
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
強制型変換について
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
-bash: java: コマンドが見つからない 解決方法
-
セミコロン期待値エラー解決
-
ジャバアレイ
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Java の double データ型における 0.0 と -0.0 の問題