• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:列挙型:次の要素を返す?)

Javaの列挙型で次の要素を返す方法について

このQ&Aのポイント
  • Javaの列挙型で次の要素を返す方法について調査しました。
  • EnumMapやEnumSetというクラスを使うことで、次の要素を返すメソッドを簡単に実装できます。
  • 次の要素を返すメソッドや前の要素を返すメソッドは需要がありますが、Javaの標準では提供されていません。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

Enum では、要素を ordinal の順番で並べた配列が values() メソッドで取得できます。 これを使えば switch に一つ一つの条件を書かなくてもよいかと。 なお、 values() は static メソッドです。 例) ------------------------------------------------------ Wind next(Wind w) { Wind[] vals = values(); int nextOrd = w.ordinal() + 1; return nextOrd < vals.length ? vals[nextOrd] : vals[0]; } ---------------------------------------------------------- ちなみに、引数無しで自分自身の次を返した方がスッキリするかも知れません。 例) ------------------------------------------------------ Wind next() { Wind[] vals = values(); int nextOrd = ordinal() + 1; return nextOrd < vals.length ? vals[nextOrd] : vals[0]; } ----------------------------------------------------------

参考URL:
http://www.javainthebox.net/laboratory/J2SE1.5/LangSpec/TypesafeEnum/TypesafeEnum.html
jst123
質問者

お礼

回答ありがとうございます。 なるほど、一度配列に直してしまうのですね。 全く考えが及びませんでした…… おかげでソースもすっきりしましたし、疑問も解消されました。 ありがとうございます。

その他の回答 (2)

  • annyg2
  • ベストアンサー率50% (8/16)
回答No.3

そういう仕組みはあるにはあります。 EnumSetならAbstrctCollectionインターフェースを実装しているんで、toArray()メソッドで配列にすることができますし、iterator()メソッドでイテレータを取得することもできます。(ので、要素を順番にとることができます) というか、こういうことがしたいのであれば、最初から配列を使うべきで、enumを使うこと自体が適していない気がします。 余談ながら、C言語でenumを間違って使っていた人はJavaでもこういうことをする傾向があるように思います。

jst123
質問者

お礼

回答ありがとうございます。 あるにはあるんですね。 余談の方が気になるのですが、enumを間違って、とは ふつう列挙型は序数による前後関係を利用するべきではない、ということでしょうか。 恥ずかしながら、Cでもこのような書き方をよくしていました……

回答No.1

Javaから離れて久しいのですが、enumのコンストラクタでは序数が暗黙的(?)に与えられるようです。 単純に定義順に前後が欲しいならこれを使うことが出来るのではないでしょうか。 そもそも列挙するだけなのでそれぞれの値の関係については実装する側で準備してやるべきだと思います。

jst123
質問者

お礼

回答ありがとうございます。 色々試してみます。