| 

.NET C# Java Javascript Exception

hilfe bei alternative zu innerer klasse

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


hilfe bei alternative zu innerer klasse

soulspirit - 06.08.2008 14:44
hi!

ich bin noch rellativ neu bei groovy, wurde sozusagen von dern chefebene genötigt die vorteile von groovy zu nutzen. jetzt hab ich hier eine applikation die sich zusammensetzt aus
groovy
spring
hibernate
java
groovy

und will folgenden code in groovy unterbringen:
public List<Core> next() {

/* hier die anonyme innere klasse die ich gerne realisieren würde:
*        return transactionTemplate.execute(new TransactionCallback() {
*            public Object doInTransaction(TransactionStatus status) {
*/
                def page =  dao.getPage();

                String[] aliases = dao.getAliases()

                Core o;
                List<Core> l = new ArrayList<Core>();
                page.each {p ->
                    o = new Core();

                    int i = 0;
                    aliases.each {a ->
                        o."${a}" = p;
                        i ++;
                    }
                    l += o;
                }

                return l;
            }
        /*ende anonyme klasse
        });
       */

    }

leider unterstützt groovy ja keine inneren klassen, aber ich hab noch keine idee wie sowas "groovysch" ausschauen sollte.. aus diesem beispiel bin ich nicht wirklich schlau geworden.. klick


Re: hilfe bei alternative zu innerer klasse

christian - 06.08.2008 15:11
Die Groovy-Alternative zu inneren Klassen sind in typischerweise Closures. Es gibt zwar noch ein paar Besonderheiten, aber im Prinzip kann man eine Closure wie folgendes Konstrukt benutzen:
public class Ausführbar{
  public void run(){
    // mach was
  }
}

Diese Klasse könnte alle möglichen Anweisungen kapseln, die immer über run() ausgeführt werden können. Etwa so:
public void führeAus(Ausführbar a){
  a.run();
}
Wenn ich das richtig sehe, entspricht das etwa deinem Anwendungsfall.

Nun könntest du die Klasse "Ausführbar" durch eine Closure ersetzen und der Methode "führeAus" eine Closure übergeben:
def führeAus(Closure c){
  c.call()
}

Closure c = { print "mach was!" }
führeAus(c)
// oder kompakter
führeAus{ print "mach was!" }

Gruß
Christian


Re: hilfe bei alternative zu innerer klasse

christian - 06.08.2008 16:34
Sag mir, wenn ich mich irre, aber transactionTemplate.execute(impl) erwartet doch einen Parameter vom Typ TransactionCallback oder nicht?

Was hältst du davon die Klasse, in der execute(TransactionCallback tc) definiert ist, abzuleiten und eine Methode execute(Closure c) einzufügen? Oder du leitest TransactionCallback ab und führst in der Methode doInTransaction(TransactionStatus status) die Closure aus.

Gruß
Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "hilfe bei alternative zu innerer klasse" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.