Mixin Script Function in JavaFX

今日は mixin でちょっとした発見があったので書き留めておこうと思います。

JavaFX では mixin がサポートされてはいるのですが...
どうもまだ 仕様も実装も安定していないようで、試しては挫折の繰返し...
しかし、今回の発見により mixin がかなり熱くなってきました。自分の中で..

で何を発見したかというと...

Script Function も mixin される
ということ。ちなみに Script Function とは Java でいうところの 静的メソッド みたいなもの

なんだ、そんなことか と思われる方もいるかもしれませんが、これはとても大きな意味を持っています。
従来、mixin は Java の interface + α的な感じで扱われてきました。
ところが Script Function の mixin は Java の static import のように 内部実装を簡略化するための仕組みとして利用できるのです。

例えば、ユーティリティ関数を集めた mixin クラス Util を extends すれば、それらの function を あたかも ビルトイン関数のように利用できるようになります。
しかも、mixin は通常のクラスの継承関係と干渉することがないので、CustomNode を extends する場合でも 以下のような感じで利用できるのです。

Util.fx
public mixin class Util {}

protected function foo() {  // mixin したクラス以外から利用できないように protected
   // 何らかの実装
}
MyNode.fx
public class MyNode extends CustomNode, Util {

    override function create(): Node {
        ...
        foo();   // Util の function を呼び出せる。
        ...
    }
}

public function run() {

    foo();    // もちろん Script Function のなかでも呼び出せる。

}
こんな便利な機能を使わない手はないでしょう。
と言うことで、次回 この機能のちょっとした利用例を紹介したいと思います。