Processing の PApplet クラスを使用するプログラムを Java で作成しました。このクラスは、バックグラウンドで PApplet オブジェクトをインスタンス化します。他のいくつかのクラスでこのオブジェクトへの参照が必要だったので、次の小さなトリックを使用しました。
public class MyApplet extends PApplet {
public static MyApplet myApplet;
// plus other various fields...
// initializing block
{
myApplet = this;
}
// stuff...
}
// Now in some other class
import static MyApplet.myApplet;
class OtherClass {
// here I can use the reference to myapplet
myApplet.whatever();
}
すべてが素晴らしくクールに機能しました。しかし、このコードをすべて Groovy に変換したいと考えました。問題は、Groovy のクロージャーが変数の「スナップショット」を宣言時に非常に早い段階で取得することです。そのため、myapplet
フィールドが初期化されていないと見なされます。Groovy は初期化ブロックよりも早い段階で処理を行います。少なくともmyapplet
、Groovy クラスで が null と見なされる理由についての私の説明です。
どうすればこれを回避できますか? PApplet
バックグラウンドで構築されているアプレット オブジェクトへの参照を取得するにはどうすればよいですか?