kakts-log

programming について調べたことを整理していきます

java static final int とenumの違いについて

javaの勉強をしていて、最近まで恥ずかしながらenumについて全く知らなかった。 enumについて調べた上で、 static final int で宣言した定数と何が違うのかという疑問も浮かんだので、 enumについての簡単な説明と、上記の疑問について、両者の違いをまとめてみようと思った。

  enumとは
enumとは: 型付きの定数を作る機能 ここで、方向を表す列挙型、つまりenum typeを宣言すると public enum Direction { NORTH,SOUTH,EAST,WEST } となる。ここでは、4個のenum constant が宣言されている。 このenum constantを使う場合には Direction.NORTH Direction.SOUTH といったように、列挙型.定数名で利用することが出来る。

  static final intで宣言した定数との違い
上記の使い方を調べた上で、よくコードでみかける final static int で宣言された定数の使い方と何が変わるのかという疑問が浮かびました。
 ここで、javaの参考書や、web上にある記事によると、 static final intを使った定数は、enumを使った定数に比べていくつか欠点があるらしい。

欠点は以下の4つである。
・タイプセーフではないこと  定数として想定した意外の値でも使えてしまう

・煩雑であること  0や1など、異なる定数値を明示的に割り振る必要が生ずること  enumの場合、名前を並べたら、自動的に異なる定数値になる。

・文字列との相互変換できない  定数値を文字列に変換するための仕組みが必要。  enumなら、自動的にtoStringやvalueOfが用意される

・すべての定数を管理できない  enumの場合、valuesメソッドですべての定数値
を管理できる。

 以上の理由から、定数が必要な場合はenumを使った方がよいらしい。 自分では、まだその違いと、enumの強力さがわからないが、意識して使ってみようと思った。