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 まで使えるようとかとても気持ちいいです。


虎の穴のページをさらさら読んでみました。switchで使えるというのは確かに便利そうな感じですね。
そもそもJavaのバージョンがあがるにつれ、何が増えてるのかが、既に追えてません。これじゃあかんなぁ・・・。
switch が使えれば美しく書けそうなのに int しか使えないせいで if で書かざるをえないときってけっこうあったから、こういうのは嬉しいー。
この調子で、拡張 for 構文を XML をパースするときとかにも使えるようになったりしたらいいなー。