I am crazy about JavaFX

初めて間もないのだから当然なんだけど、JavaFX を勉強していていろいろと発見する。
というかここまで Java と違うもんだとは思っていなかった。
JavaScript とは書き方が似ている部分が少しあるだけで全然違う。


例えば
クラス定義の外に書くスクリプト関数というものがあったり
public-read とか public-init なんていう変数(var)のアクセス修飾子があったり
package なんてアクセス修飾子があったりする。


それでも動かすときは Java VM 上で動くのでコンパイルすると、class ファイルになる。
だから javap -verbose で中がどうなっているのか調べることができる。
コンパイルすると、JavaFX ソースファイル名から拡張子 ".fx" を取り除いた名前の(例えばファイル名が HogeFx.fx ならば HogeFx という名前の)クラスが暗黙に作成される。
スクリプト関数はその暗黙に作成されたクラスの static メソッドになっていた。


var アクセス修飾子については
public-read は外部からは参照だけを許す。
public-init は外部からの初期化はオブジェクトリテラル内でのみ許し、参照はどこからでも可能。
という意味を持つ。
クラスの内部ではメソッドが生成されていて、それでアクセス制御しているみたい。

public-read package var x;

なんて、組み合わせることもできるそうな。


それから、通常のアクセス修飾子(Primary Access Modifiers)については
デフォルト(省略)、package、protected、public があって

  • デフォルト ・・・ Script only access - Java の private に相当
  • package ・・・ Package access - Java の デフォルトに相当
  • protected ・・・ Protected access - Java の protected に相当
  • public ・・・ Public access - Java の public に相当

てな感じ。
どの修飾子を使っても実はクラスの内部では全部、public 修飾されている。(スクリプト関数で試してみた結果)
そして RuntimeVisibleAnnotations の属性で、内部的にアノテーションを使って実現している様子。


まあまだまだ解からないことは一杯あるけど、この時点でわかっていることはやっぱり新しいことを勉強するのは楽しいもんだってこと。


JavaFX 最高!


http://openjfx.java.sun.com/current-build/doc/reference/JavaFXReference.html