ちょっと補足。先頭に、質問5150の続き、と書いておくと、後からこの質問を読む人にも分かりやすくなりますよ。URLを貼るだけでもOKです。
さて本題ですが、最初の「標準出力にtexts配列の要素全てを渡している」について。
前回のサンプルでは、namae
を変えたあとで全てのReactiveString
の値が自動的に変わる、ということをご理解いただくために、全てを表示させています。
もちろん、1つだけを選択して表示することも可能です。
前回作ったReactiveString
は、toString
メソッドで文字列を取得できますので、
lang
1ReactiveString[] texts = { /* 省略 */ };
2int i = 0; // 表示したい要素のインデックス
3textmessage.setText(texts[i].toString());
のようにすればOKです。
次に、「"こんにちは"のみを追加する場合」ですが、
上で書いた通り、toString
で文字列が得られるようにしていますので、texts
の配列はReactiveString
に限定しなくても良いのです。
具体的には、配列をObject[]
にします。すべてのクラスにはtoString
メソッドが備わっていますので、toString
で文字列を取得する前提であれば、どんなクラスのオブジェクトでも格納できます。その代わり、toString
メソッド以外のReactiveString
のメソッドは使えなくなります。今回のケースではObject[]
にしても問題ないと思います。
上記を踏まえて、前回の「使い方」を修正した例を下記に示します。
(System.out.println
の中でtoString
をするので、通常は呼ぶ側でtoString
を書く必要はありません。)
lang
1ObjectReference ref = new ObjectReference("John");
2Object[] texts = {
3 new ReactiveString("こんにちは%sさん", ref),
4 new ReactiveString("さようなら%sさん", ref),
5 "こんにちは", // Stringクラスのオブジェクト
6 Integer.valueOf(123) // Integerクラスのオブジェクト
7};
8for (Object v : texts) {
9 System.out.println(v.toString()); // toStringは無くても良い
10 // こんにちは、Johnさん
11 // さようなら、Johnさん
12 // こんにちは
13 // 123
14}
15ref.value = "Jane";
16for (Object v : texts) {
17 System.out.println(v.toString()); // toStringは無くても良い
18 // こんにちは、Janeさん
19 // さようなら、Janeさん
20 // こんにちは
21 // 123
22}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/10 08:20
2015/01/10 08:30
2015/01/10 08:47