Java (J2SE1.4+J2ME)でおや?と思ったところ
virtual キーワードがない
ということは、全てのメソッドは既に virtual なんですね? まあ virtual の有無によるトラブルが起こり得ないのはいい事かも。
const は予約語としては入っているものの、使えない模様
定数の宣言に const ではなく static final を使うのは違和感があります。(final ってこれ以上派生しません、って意味なのでは…)
また、インスタンスの中身を変更しないという意味の、メソッド自体に対する const 宣言できないようので、外部から下手に中身をいじられないように設計の時点で防衛することができないのは const 厨(^^;)として、とても残念です。
ソースを眺めているときに、このメソッドがインスタンスの中身を変更する可能性があるかどうかを const の有無で即座に判断できたのがとてもよかったのに…。
まあメソッドの const 宣言は内外に伝播するので嫌う方も多いようですが、const 宣言で統一できたときの達成感が凄まじいので「そこがいいんですよー」と言っておきます(^^;)。
インスタンスを返すメソッドは参照を返す
C++ では明示的に参照演算子をつけない限り、値のコピーを返すようになってたので、Java でも同じ要領で書いてしまうと、うっかり参照を返してしまいそのインスタンスを変更してしまってギャーというトラブルをやってしまいました。(現状では get メソッドの内側でコピーを生成して返す、なんてことをやってます…。)
Vector に放り込んだ最初の要素を取得するには、Enumeration を取ってきた後に nextElement() する必要がある
最初の要素を取得するのに next かいな! とツッコミを入れたくなります(^^;)。まあ Enumeration のメソッド一覧を眺めたら hasMoreElement() と nextElement() しかないため、すぐに理解できましたが…。
C++ の iterator では要素の取得(*演算子)とインクリメント(++演算子)が別になっており、コンテナから begin() で取得した時点で最初の要素を指しています。
コピーコンストラクタは推奨されてないらしい(出典は「プログラミング言語Java 第3版」 pp.47)
J2SE1.4 では Cloneable (typo?)インターフェースを実装して clone() を書け、となっていますが MIDP2.0 にはそんなインターフェースがない模様…。仕方ないので自分で clone() を書いています。
また、String には clone() がない代わりにコピーコンストラクタがあったりするので、ポリシーがようわかりません…。
インスタンスを "==" で比較して同値性と同一性のワナにかかる
C++ で書く時は operator==() を定義して中身が等しいかどうか確認するようにしているのですが、Java での挙動は C/C++ におけるポインタ同士を比較するようなものになってしまうんですね…。特に String で何度もハマっています。
*1:J2SE5.0 から導入されたそうです。