著作一覧 |
Java5で突然enumが入ったわけだが、突然というのは、JVMの修正を伴わない変更によって、ということ。ということは、1.4のころと生成されるバイトコードは別段変わらなくて、単にjavacが解釈できる言語仕様が豊かになったというだけのことだ。
これは、Rjbを通してみるとわかることでもある。
こういう問い合わせがきた。
public class Foo { public enum Bar { ONE, TOW, THREE }; ... }
に対して、Bar = Rjb::import('Foo.Bar')
がエラーになる。Rjbはenumに対応しているか?
え、enumに対応したっけな? と一瞬だまされて、試すと、確かにエラーになる。
しかし、そこで落ち着いて、とりあえずコンパイルしたファイルを見ると、Foo$Bar.classがあるじゃん。ああ、そういうことか。
おおざっぱには、javacがenumというキーワードを見かけると、以下のようなものにソースを変形させる(もちろん、実際にはソースを変形させるわけではないので、下のリストはあくまでも、のようなもの)。
public class Foo { public final class Bar extends Enum { String nm; int ord; private Bar(String n, int o) { nm = n, ord = o; } public static Bar[] values() { return new Bar[] { ONE, TWO, THREE }; } public static final Bar ONE = new Bar("ONE", 0); // 失敗。ZEROにすれば良かった public static final Bar TWO = new Bar("TWO", 1); public static final Bar THREE = new Bar("THREE", 2); public int ordinal() { return ord; } public String name() { return nm; } public String toString() { return nm; } public boolean equals(Object o) { return o == this; } // 以下はJavaではない。 public int (int){ return ordinal; } // C++のキャスト演算子オーバーライドの書き方忘れた。こんなんだっけ? } …… }
したがって、最初の問い合わせの回答は、ネステッドクラス表記をすれば良い。つまり
やりつそらいって、とてもいかした名前だと思うのだが、もしかしておぎゅうそらいって、やりつそらいから名前を取ったのかな?
と思ったら、やりつそざいだった。惜しいなぁ。そらいだったらよかったのに。
そういえば、と、Wikipediaを読みつつ思い出したが、やりつそざいの功績の1つがモンゴル人による中国人に対する大虐殺を中止させたことだ。
華北の大平原を無人にすれば遊牧に適した土地になるから捕虜とした中国人を皆殺しにしようと進言したのを押しとめ、……新税制の導入によりモンゴル帝国は定住民からの安定して高い税収を得ることができるようになり、オゴデイはこれに感嘆して楚材を賞賛したという。
命がけのビジネスモデルと言える。
楚材自身がそのような虚栄を好む小人物であったからだと結論し、楚材の人格も否定的に論評している。
ふむ。記録は重要だなぁ。
ジェズイットを見習え |
元ネタはたぶんメタルギアソリッド(というゲームシリーズのいずれか)ですね。
どうもありがとうございます。ゲームだったのか。
どっちが元ネタかわからないですよw<br>あの「監督」名乗ってる人が技研時代に披露した研究はいかにして映画からネタをパクルかという内容で詳細はビデオのザッピング環境の構築でしたから…。
ううむ、どっちも見たこともプレイしたこともないのでわかんないけど、みんな大好きカーペンターだからそれ(さらなる元ネタということは)もありそうですね。
Barはjava.lang.Enumのサブクラスになりますね。
御指摘感謝。修正しておきました。
メタルギアのスネークはたぶんこのシリーズから借用したものでしょう。「スネークとの交信」はゲームからの引用だと思います。
おおどうも。確かに、交信するときに、「こちらスネーク」とは一言たりとも言ってませんでした。「スネークと呼べ」の嵐はおもしろかったけど。