「//fix this/」の記事インデックス

//fix this/ Javaコードの間違いをさがせ!


このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。


第2回目 (Java Magazine 2012/May-Juneからの出題)


1. 今回のテーマ 「JavaFX バインディング機能」


JavaFXのクールな機能の1つにバインディング機能があります。 JavaFXプロパティがバインディングに含まれている場合、1つのオブジェクトに対する変更が自動的にもう1つのオブジェクトにも反映されます。 この機能によって画面表示とそのもとになっているデータとの同期を自動的に維持できるため、特にグラフィカル・ユーザー・インタフェースの作成時に効果を発揮します。



2. コード

JavaFXアプリケーション用の次のコードについて考えてみましょう。


...
IntegerProperty myInt = new SimpleIntegerProperty(5);
IntegerProperty myBoundInt = new SimpleIntegerProperty(0);
myBoundInt.bind(myInt);
myInt.set(8);
System.out.println("My bound integer's value is: "+ myBoundInt);
myBoundInt.set(5);
System.out.println("My bound integer's value is: "+ myBoundInt)

3.正しいのはどれ?

このコードを実行した場合の出力は以下のどれになるでしょうか。

1)
My bound integer's value is: 8
My bound integer's value is: 5

2)
My bound integer's value is: 5
My bound integer's value is: 5

3)
My bound integer's value is: 8
My bound integer's value is: 8

4)
My bound integer's value is: 8
Exception***

<ヒント>
JavaFX 2.0ドキュメント『Using JavaFX Properties and Binding』をご覧ください






【答え】

正解は4)です。myBoundIntのsetメソッドを呼び出すところで例外が発生します。なぜでしょうか。myBoundIntはバインドされた変数であり、直接変更できないからです。myBoundIntの値を変更するには、myBoundIntがバインドされているプロパティであるmyIntを変更する必要があります。


<< 第1回へ戻る I 第3回へ進む >>

「//fix this/」の記事インデックス