Clase interna anónima en groovy
-
10-07-2019 - |
Pregunta
Estoy investigando la integración de wicket maravilloso y la falta de clases internas anónimas parece ser un problema al escribir los controladores de eventos. ¿Hay alguna forma más genial de escribir este código?
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"}
}
Solución
Puedo estar equivocado, pero ¿no es esto lo que WickeBuilder intenta resolver :
La utilidad Wicket Builder implementa un Groovy Builder para construir Árboles de componentes de Wicket.
Mientras usa el constructor hace que la construcción Árboles componentes más fáciles y más claros para el lector, el controlador original era el hecho de que Groovy no permite Clases internas anónimas. Postigo se basa en métodos de anulación para Proporcionar funcionalidad personalizada para muchos Tipos de componentes. Groovy puede ser usado para codificar clases de página de Wicket, pero cada la clase que se anula necesita un nombre definición de clase Posible, pero torpe.
El WicketBuilder simula estos anula con cierres nombrados. Los cierres son, esencialmente, portátiles. bloques de código Debajo del capó, el el constructor crea una clase dinámica anula y ejecuta los cierres cuando se llama al método nombrado.
[...]
Otros consejos
Ermh .. Esto no se ve como un "bueno" alternativa, pero parece ser el "oficial" Alternativa maravillosa:
Ejemplo completo para groovy 1.7.xy wicket 1.4.x http://wash-inside-out.blogspot.com/2010/08/wicket-and-groovy-integration.html
en realidad no uso Groovy con frecuencia, pero me hizo la misma pregunta hace unos meses. probé diferentes enfoques
http: //rschmid.wordpress. com / 2009/05/03 / anonymouse-inner-classes-in-groovy /
Groovy 1.7 y superior admiten clases internas anónimas. Ver groovy 1.7 notas de la versión .