Java における本質的でない記述がどのように大規模開発に役立つのか - kwatchの日記
本質的でない記述というのが冗長であると言う意味ならば、規模とは無関係に役立たないと思う。スクリプト系言語でトリッキーな書き方が可能なのは、kwatch氏の言う「本質的な記述」とはまた別問題だと思うが、質問の意図と一部の解答の間に齟齬を感じるな…。
Javaが大規模開発で使われる言語的な理由は、静的型付けのコンパイル言語である事ぐらいなもので、他は高機能なIDEの存在、担当者が責任回避に文句を言う相手(サポート)があることが主な理由じゃないですかね。冗長な記述しかできないなんて理由でないのは確かだろう。
あとFileReaderに文字コードが指定できないのは例によって英語圏のエゴのような気がする。ただ、以下のようなクラス作っとけば良いだけなので大した事はない。
public class MultibyteTextReader extends BufferedReader { public MultibyteTextReader(InputStream stream, String encoding) throws UnsupportedEncodingException { super(new InputStreamReader(stream, encoding)); } public MultibyteTextReader(File textFile, String encoding) throws UnsupportedEncodingException, FileNotFoundException { this(new FileInputStream(textFile), encoding); } public MultibyteTextReader(String textFile, String encoding) throws UnsupportedEncodingException, FileNotFoundException { this(new File(textFile), encoding); } }
こういうクラスが簡単に作れる、というか元々が小粒なので(設計さえ良ければ)サブクラスが作りやすいのは小クラス主義のメリットかも。これは単にコンストラクタを定義しただけだが、小さなパーツを組み合わせて、大きなパーツを組み立てるような感じで、ブロック遊びというかパズルを組み立てるというか、組み合わせの妙に楽しさを感じる。
Javaの冗長な記法って小クラス主義の現れではないかな - 矢野勉のはてな日記
初めてJavaに触れたとき、そういう小さな部品を用意するから組み合わせてなんとかするのって、ちょっとUNIXっぽい、と思った覚えがあります。コマンドを組み合わせてパイプでつなげてなんとかしちゃう、みたいなね。
という言葉に近い感覚。私がJava好きな理由は、矢野さんのそれに似ている気がする。
ただ面倒くさいのは、毎回こういうクラスを定義しなきゃならない事。CPANやRubyGemsのような気軽に使える仕組みがあればいいと思う。Mavenがもうちっと敷居が低くなるだけでも良いのかもしれない。