JavaFX 1.0 変更追記

朝書いたとおり,1.0正式版で結構変わってしまったJavaFXだが,その後いじっていたらもっとインパクトのある変更があったことが判明.

デフォルトアクセス制限の変更

Javaには,public/protected/privateという3つの修飾子があって,メンバがどこから参照可能であるかのアクセス制限を決めている.でも実際にはこの3つ以外に通称packageと呼ばれるアクセス制限があり,修飾子を何も書かないデフォルトのときにはこのアクセスモードとなる.この場合,同じパッケージ内からはアクセス可能,ということになる.JavaFXも以前はこれと同じルールだった(と思う).つまり何も指定しなければ同じパッケージのなかからはアクセスできた.

ところが,1.0正式版ではデフォルトがprivate相当になってしまった.つまり明示的に修飾子をつけないと同じファイルの中からしかアクセスできない.じゃあprotected はどうなったのか,というと,なんとprotectedというキーワードがちゃんと導入されていて明示的に書くことができる.逆にprivate は修飾子として認識されないらしく,エラーがでる.むむむ.

まとめると

access mode        Java           JavaFX1.0
----------------------------------------------
private          private           private
protected        protected         protected
package          (default)         package
private          private           (default)  

これってどうなの?

というわけで,これまで書いたプログラムの大半にpublicもしくはpackageを付けて回らなければならない.はっきり言ってすごくめんどくさい.そもそもprivateをデフォルトにする理由がわからないのだが,どういうポリシによるものなのだろうか.すべてのコードをなるべく1つのファイルに押し込め,ということなのだろうか? ちょっと理解できない.まあ,慣れればいい話なのだが.

public_read/public_init

さらに,public_read と public_init という修飾子が追加されている.前者はpublicに読みだすことができるが,書き込むことはできないことを,後者は初期化のときだけは書き込みができて,後は読み出ししかできない変数を示す.後者だと初期化はできるが,bindはできないことになる.

これまではFontのsizeなどbindしても意味が無いものまでbindできてしまっていたが,public_initになったことで,コンパイル時にあやまったbindを検出できるようになっている.ありがたい.

また,public_readが付け加わったことで,一部の読み出し用メソッドが廃止され直接変数から読み出せるようになった.MouseEventなど.