[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