Javaの列挙型について(1)
Javaの列挙型について。
public static final int DIRECTION_NORTH = 0; public static final int DIRECTION_EAST = 1; public static final int DIRECTION_SOUTH = 2; public static final int DIRECTION_WEST = 3; private static void showDirection(int direction) { switch (direction) { case DIRECTION_NORTH: System.out.println("北"); break; case DIRECTION_EAST: System.out.println("東"); break; case DIRECTION_WEST: System.out.println("西"); break; case DIRECTION_SOUTH: System.out.println("南"); break; default: break; } } public static void main(String[] args) { showDirection(DIRECTION_NORTH); }
方角として定数を定義。
その方角を引数して取る(ことを想定した)メソッドと,
それをつかったmain関数。
しかし,こんなコードも書けてしまう。
public static void main(String[] args) { showDirection(0); showDirection(-1); }
showDirectionメソッドは引数として方角を取ることを想定している。
しかし,実際はint型の引数だから,方角の定数以外も引数にできてしまう。
そのため,北の入力としてDIRECTION_NORTHでなく0を入れることもできる。
また,0,1,2,3,以外の値も入力にできる。
良くない。
実際には上のようなソースコードを書くことは無いと思うけれど。
結果的にそうなってしまうパターンもあるのでは。(あるかな?)
そこで,列挙型を使ってみた。
Direction.java
package com.rmstar.enumsample; public enum Direction { NORTH, EAST, SOUTH, WEST, }
Main.java
package com.rmstar.enumsample; public class Main { private static void showDirection(Direction direction) { switch (direction) { case NORTH: System.out.println("北"); break; case EAST: System.out.println("東"); break; case WEST: System.out.println("西"); break; case SOUTH: System.out.println("南"); break; default: break; } } public static void main(String[] args) { showDirection(Direction.NORTH); } }
列挙体を使えば,showDirectionの中に0や-1みたいな想定外の入力が入ることも無い。
Javaの 列挙型は他の言語と違ってクラス。
次はこの当りを確認したいと思います。
それでは,また会えることを祈りつつ。