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

[jfriends-ml 10281] Re: Effective Java 第 5 回議事録



高橋(徹)です。

   "YAMASHIRO Shunsuke <felio@xxxxxxxxx>"さんは書きました:
> > ■  asXXXX()は使わない。 toXXXXX()と区別つかない。
> 
> ここ、高橋徹さんと中華料理屋に行く途中に会話しているうちに、意味の違いが
> ある気がしてきました。
> 
>  'to' は変換で、'as' はviewだと書いてあったように、
> 
>  * 'to' で変換したものをいじっても、元のほうには影響を与えない
>  * 'as' で変換(?)したものをいじると、元のものには影響を与える
> 
> ということだと思います。java.util.Collection#toArray は得られた配列に対
> する操作は元の Collection へ影響は与えませんが、java.util.Arrays#asList 
> は得られた List への操作は元の配列へ影響を及ぼします。
Arrays.asListは、ArrayListをnewしますが、配列をそのまま渡してし
まっているので、後で配列をいじってしまうとListの中まで変化してし
まいますね。

BeanShellで簡単に実験してみると以下のとおりです。
※BeanShellはJavaのクラスをいじれるスクリプト言語です。

bsh % names = new String[] {"Tom", "Jerry", "Micky" };
bsh % print(names);
Array: [Ljava.lang.String;@540408 {
   Tom
   Jerry
   Micky
}
bsh % nameList = Arrays.asList(names);
bsh % print(nameList);
[Tom, Jerry, Micky]
bsh % names[2] = "Thomas";
bsh % print(nameList);
[Tom, Jerry, Thomas]

配列の要素を入れ替えてしまうと、Listの方も中が入れ替わっています
ね。これが、viewだといっている所以なのでしょう。

---
Toru TAKAHASHI