argius note

プログラミング関連

アップキャストの話

少し前に話題になってたやつです。ローカル変数の場合の。

List list = new ArrayList();

アップしたいわけではなくて、Listが使いたいだけなんですよという主張とか言ってみます。つまり、

// ※注:実際のJavaコードではありません。
List list = new List();
List list = List.newInstance();
List list = ListFactory.create();

がしたいんです。さらにできれば、

// ※注:実際のJavaコードではありません。
Array array = new Array[] {1, 2, 3};
Array array = new Array(1, 2, 3);
Array array = {1, 2, 3};

こんな風にRubyっぽい感じで書けたら良いのに。

でも、Streamとかはこれに当てはまらないですね。

InputStream is = new FileInputStream("a.dat");

この場合、ここではInputStreamのインタフェースが要求されていて、FileInputStreamで追加されたメソッドは使わない、という主張を込めているというのがあるかも知れません。ただ、あとでやっぱりFileInputStreamで拡張されているメソッドを使うことになると困るんですけど。
最後に、先頭が(コード量が減って)見た目すっきりしてバランスが良いから好んで使ってしまうというのはダメですか。