Groovyの匿名内部クラス
-
10-07-2019 - |
質問
groovy-wicketの統合を検討していますが、イベントハンドラを作成する際に匿名の内部クラスがないことが問題のようです。 このコードを作成するよりグルーヴィーな方法があります
import org.apache.wicket.PageParameters
import org.apache.wicket.markup.html.basic.Label
import org.apache.wicket.markup.html.link.Link
import org.apache.wicket.markup.html.WebPage
/**
* Homepage
*/
class HomePage extends WebPage {
public HomePage(final PageParameters parameters) {
// Add the simplest type of label
add(new Label("message", "Wicket running!"));
def link1 = new ClickHandler("link1") //in java, defined inline
add(link1);
}
}
class ClickHandler extends Link{
ClickHandler(String id) {
super(id);
}
void onClick(){println "Hi"}
}
解決
間違っているかもしれませんが、これは WickeBuilder が解決しようとしていることではありません:
Wicket Builderユーティリティは、 構築するためのGroovy Builder Wicketコンポーネントツリー。
ビルダーを使用すると、ビルドが行われます コンポーネントツリーがより簡単で明確に 読者にとって、元のドライバーは Groovyが許可しないという事実 匿名の内部クラス。改札 メソッドのオーバーライドに依存する 多くのユーザーにカスタム機能を提供します コンポーネントの種類。 Groovyを使用できます Wicketページクラスをコーディングするが、それぞれ オーバーライドされるクラスには、名前付きの クラス定義。可能ですが、 不器用。
WicketBuilderはこれらをシミュレートします 名前付きクロージャーでオーバーライドします。 クロージャーは、本質的にポータブルです コードブロック。ボンネットの下、 ビルダーは動的クラスを作成します 次の場合にクロージャーをオーバーライドして実行します 名前付きメソッドが呼び出されます。
[...]
他のヒント
Ermh ..これは「良い」とは思えません。代替案ですが、「公式」のようです。 Groovyの代替:
groovy 1.7.xおよびwicket 1.4.xの完全な例 http://wash-inside-out.blogspot.com/2010/08/wicket-and-groovy-integration.html
iは実際にはgroovyを頻繁に使用しませんが、数か月前に同じ質問をしました。さまざまなアプローチを試しました
http://rschmid.wordpress。 com / 2009/05/03 / anonymouse-inner-classes-in-groovy /
Groovy 1.7以降は、匿名の内部クラスをサポートしています。 groovy 1.7 リリースノートを参照してください。