いろいろガンガンいこうぜ。体も大事に

普段はJavaでAndroidアプリ開発しているプログラマーのブログです。

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の 列挙型は他の言語と違ってクラス。
次はこの当りを確認したいと思います。





それでは,また会えることを祈りつつ。