静的に型定義された言語に関しては、何かが足りないと感じています。私がかなり多くの場合、perl way backを使用しただけでは、呼び出す関数をオブジェクトに伝えることができる多くの方法がありました。メソッドリファレンスをオブジェクトコンストラクタに渡す
は今、私はJavaでだと、私は、一般的なButton
クラスを持って、私は簡単に流行っ
に似た何かを行うことができますどのように見ることができません。これは、実際に使用されるすべてのボタンによってサブクラス化されます。クリックされると呼び出すメソッドが異なります。
クリックしたときに呼び出すメソッドへの参照を渡す方法がないので、すべてのボタンに1つのクラスを使用できますか?現時点では
、私はこのようなボタンを作成:
// Specifically using the subclass that sets "firemode" to "close"
FiremodeClose fc = new FiremodeClose(Settings.ui_panel_start, Settings.ui_panel_row_firemode, game);
painter.addSelectionButton(fc);
clickTracker.addSelectionButton(fc);
このofcourseのは、サブクラスの無数の、唯一の配置、ラベル/グラフィックス、およびメソッド呼び出しが異なる各1をcouses。それは次のように何かをするより理にかなって:
// Generic button, the method that sets "firemode" is somehow passed as arguement to the contsructor.
Button fc = new Button(&referenceToFunctionToCallWhenClicked, otherArguementsEtc);
painter.addSelectionButton(fc);
clickTracker.addSelectionButton(fc);
私が言ったように、私は何かが欠けする必要があります感じて、それはこのように私はと離れるせ、これを達成する方法がなければならないことを意味しますので、サブクラスのない1つのButton
クラスのみです。
class MyButton {
private final Runnable action;
public MyButton(Runnable action) {
this.action = action;
}
...
}
を、ボタンがクリックされたときにaction.run()
を呼び出します。
これはインターフェイスのためのものです。 Java 8とGroovyは、このようなユースケースのインラインインタフェース実装を簡単にします。 – chrylis
^^^それと、匿名のクラスも見てください。 –
@chrylisそれがインターフェイスのためのものなら、私はそれらの意図された目的以外の何かのためにそれらを使用しているに違いありません。私はこのためのいくつかのコード例を含む答えを見たいと思う。 – Jarmund