Javaの嫌なところ
いや、Java好きなんですけどね。だから嫌とは言っても、結構細かいところだったりする。
- 初期化の不定性
- C#は改善されてたはず。もしかしたら最近のJava言語仕様だと問題なくなったのかもしれないけど、初期化の順序と同期の問題があってダブルチェックロックが使えない問題がある。
- コンストラクタがクラス名
- クラス名を書き換えたときに、よく修正し忘れるんだわ。public this()とかにしてくれれば、修正しなおさなくて良いのに。
- デフォルトがfriendly
- private書くのめんどくさい。これのおかげで外から使いにくいクラスが増産されている気もするので。
- mix-inがない
- やっぱり欲しい。
- プロパティがほしい
- C#みたいなめんどくさいやつじゃなくて、Hoge hogeとHoge get hoge()/set hoge(Hoge hoge)がクラス外からは同じに見えて、優先度は後者の方が高いとかにしてほしい(どちらを呼ぶか明示化する方法も必要だけど)。JavaBeans書くの面倒だし。
- 命名規約を厳しくチェックしてほしい
- static finalな変数名は大文字+アンダーバーに固定とか。Sunの規約はあるけどコンパイラがチェックしてくれるわけではないので。他人のソースを読むときたまに困ることがある。
- 多次元配列がほしい
- C#のアレね。a[10,8]みたいな奴。
- decimal型がほしい
- BigDecimalはいいんだけど、いろいろ面倒なんだよなぁ……。業務アプリを考えるとdecimal型ってすごく重要なので(金額計算に誤差があると問題になる)。
- 関数型がほしい
- まぁ、次のバージョンで入るけど、できればもっと前にほしかった。そうすれば無名InnerClassなんてなくても良かったかもしれんね。
- 動的言語っぽい要素がほしい
- って、それ前のセクションの話題だよ!
[追記]
- 言語に組み込まれた正規表現がない
- そもそも標準化されるのが遅すぎたのも問題だけど、/正規表現/で書けないのが嫌。
- デフォルト引数がない
- これがあるだけで、overloadを書く量はずいぶん減るはず。でも嫌というほどではないか。
- ヒアドキュメントがない
- プログラム中のSQLが読みにくいという話なんだけど、まぁフレームワーク(というかS2Dao)で解決できる問題という気もしてきた。AS3.0みたいに、変数へのファイルインポート機能があれば良いのかも。
- イベントドリブン
- C#のイベントみたいな意味不明なシンタックスシュガーじゃなくて、AOPみたいなメッセージのやり取りに介入するみたいな奴が言語機能として欲しい。
- 複数戻り値
- 入力は複数できるのに、出力が複数できないのがそもそもおかしい気もするのだが。
[さらに追記]
- 行コメントが「#」ではない
- 単なる個人的な趣味だけど(w