Анонимный внутренний класс в groovy


Я изучаю интеграцию 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"}
}
5 3

5 ответов:

Я могу ошибаться, но не это ли пытается решить WickeBuilder :

Утилита Wicket Builder реализует Заводной Строитель для строительства Деревья компонентов калитки.

При использовании builder производит построение Компонентные деревья проще и понятнее для читателя, оригинальный драйвер был дело в том, что Заводной не позволяет анонимные внутренние классы. Калитка полагается на переопределение методов для предоставление пользовательских функций для многих Деталь типы. Groovy можно использовать чтобы кодировать классы страниц калитки, но каждый класс, который переопределен, нуждается в именованном определение класса. Возможно, но ... неповоротливый.

WicketBuilder имитирует их переопределения имени закрытие. Затворы, по существу, портативны блок кода. Под капотом, в конструктор создает динамический класс переопределяет и запускает замыкания, когда вызывается именованный метод.

[...]

Эрм.. Это не выглядит как "хорошая" альтернатива, но это, кажется, "официальная" заводная альтернатива:

Заводные альтернативы внутренним классам

Comlete пример для groovy 1.7.x и калитка 1.4.x http://wash-inside-out.blogspot.com/2010/08/wicket-and-groovy-integration.html

На самом деле я не часто использую groovy, но несколько месяцев назад задал мне тот же вопрос. я опробовал различные подходы

Http://rschmid.wordpress.com/2009/05/03/anonymouse-inner-classes-in-groovy/

Groovy 1.7 и выше поддерживают анонимные внутренние классы. Смотрите groovy 1.7 примечания к выпуску .