Typesafe Enum

2007 年 4 月 27 日 | カテゴリー: プログラム

J2SE 5.0 Tiger 虎の穴 Typesafe Enum
MonaOS – Free Operating System

private static final int HOGE = 0;
なんていう、結局は int な書き方はいかがなものかと思うことは確かにたまにあったけど、
Java 5.0 のときに導入された Enum いいですね、使いやすい。
switch が使えるのが地味にかなり嬉しいです。

MonaOS の InternalCommands.cpp のようなものも、これで綺麗に書けそうですね。

mona-0.3.0alpha8/mona/core/shell_server/InternalCommands.cpp

enum
{
    COMMAND_NONE,
    COMMAND_HELP,
    COMMAND_LS,

InternalCommands.java

private enum Command {
    COMMAND_NONE,
    COMMAND_HELP,
    COMMAND_LS,

mona-0.3.0alpha8/mona/core/shell_server/InternalCommands.cpp

int Shell::isInternalCommand(const CString& command)
{
    CString cmd = command.toLower();
    if (cmd == "help" || cmd == "?")
    {
        return COMMAND_HELP;
    }
    else if (cmd == "ls" || cmd == "dir")
    {
        return COMMAND_LS;
    }

InternalCommands.java

public Command isInternalCommand(String command) {
    if (command.equals("help") || command.equals("?")) {
        return Command.COMMAND_HELP;
    }
    else if (command.equals("ls") || command.equals("dir")) {
        return Command.COMMAND_LS;
    }

mona-0.3.0alpha8/mona/core/shell_server/InternalCommands.cpp

bool Shell::internalCommandExecute(int command, _A<CString> args)
{
    switch (command)
    {
        case COMMAND_HELP:
            printf("* Mona Shell Internal Commands\n");
            printf("HELP/?, LS/DIR, CD, CAT/TYPE, CHSH, UNAME/VER, ECHO, CLEAR/CLS, PS, KILL, EXEC, FD0:, CD0:\n");
            break;
        case COMMAND_CD:

InternalCommands.java

public boolean internalCommandExecute(Command command, String[] args) {
    switch (command) {
        case COMMAND_HELP:
            System.out.println("* Mona Shell Internal Commands");
            System.out.println("HELP/?, LS/DIR, CD, CAT/TYPE, CHSH, UNAME/VER, ECHO, CLEAR/CLS, PS, KILL, EXEC, FD0:, CD0:");
            break;
        case COMMAND_CD:

Enum で定義した Command は内部クラスになるらしく、String で受け取った command を isInternalCommand() で Command 型で返すことで、int でもないのに switch まで使えるようとかとても気持ちいいです。

  1. com4
    2007 年 4 月 28 日 22:36

    虎の穴のページをさらさら読んでみました。switchで使えるというのは確かに便利そうな感じですね。
    そもそもJavaのバージョンがあがるにつれ、何が増えてるのかが、既に追えてません。これじゃあかんなぁ・・・。

  2. 2007 年 4 月 29 日 23:21

    switch が使えれば美しく書けそうなのに int しか使えないせいで if で書かざるをえないときってけっこうあったから、こういうのは嬉しいー。
    この調子で、拡張 for 構文を XML をパースするときとかにも使えるようになったりしたらいいなー。