[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re:[jfriends] Re: Javaの開発生産




前橋@xxxxxxxxxx今日は客先晩から旅行 です。

はっとり さん:
> Objectしか格納  *できない* 、という言い方は正しいのでし
ょうか?
> Vector はなんでも格納できるのだから、Vector をextends 
して、
> どうにもできるような気がするのですが...。

ええと、 たとえば Hogeというクラスを格納する配列が
欲しい場合には、HogeVectorというクラスを作るという
ことですね。その場合、HogeVectorは、extends Vector
ではなくて、Vectorをメンバとして含む形にするほうが
適当かと思いますが。

確かに、そうした上で、全てのメソッドについて「皮」
を作成し、Vectorにdelegationしてしまえば、Vectorの
困ったところは解消できますね。ちょっと面倒ですけれ
ども、Vectorを直接使うよりはずっといいと思います。

> 無知ゆえ、その”Javaの駄目さ” みたいなのがわからないの
で、
> 議論しているのを見るとどうしても詳しくお話を伺いたくなります。
> よろしければ ”テンプレート” の便利さ等を素人にわかる
ように
> 教えていただけないでしょうか。

テンプレートは、クラスの定義そのものに「引数」とし
て型を与え、必要なクラス定義のインスタンス(いわゆる
クラスのインスタンスではない)を生成する機能ですので、
上記のVectorの例なら、わざわざ皮のクラスを山のように
書かなくても、引数として型を与えるだけで、必要なクラ
スを作ることができます。

AdaやC++では、型ごとに実行コードの複製が入って悲しい
のですが、どうせオブジェクトはポインタしか取れない
Javaなら、実行系に負担をかけずに実現可能な筈なんで
すが... なんでないんだろう?

Rubyのホームページでも、Javaは、「変数に静的な型が
あるくせにGenericityが配列しかない」なんて書かれて
たりしますけど。

まあ、C++のテンプレートは、同じようなことをJavaの
Vectorのように void* で実現するのに比べて、ヒープの
ブロックを別途取らなくて済むので、領域の節約にもなる、
というメリットもあって、このメリットは、Javaでは
テンプレートがあろうとなかろうと享受できないのです
けれども。

                                          de 前橋