Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Groovy & Grails > Переписать код на Java.


Автор: arcsupport 22.6.2011, 14:06
Прочитал статью "Groovy за 15 минут". Как такой код переписать на Java:
Код
new groovy.xml.MarkupBuilder().html() {
    head() {
        title("This is the title")
    }
    body() {
        div("class" : "main") {
            p("this is the body")
        }
    }
}

Автор: Stolzen 24.6.2011, 01:26
На джаву такой код переписать не получится, так как в билдерах вызываются "псевдометоды" - и по названию этого псевдометода создается тег.
А в джаве эти псевдометоды просто нельзя будет вызвать.

Далее, в джаве нет анонимных функций, которые используются как еще один параметр к каждому методу.

Однако, если очень хочется попробовать это сделать, то можно через вызов invokeMethod(), который и используется для создания этих самых "псевдометодов".

Примерно вот так:
Код

import java.util.HashMap;
import java.util.Map;

import groovy.lang.Closure;
import groovy.xml.MarkupBuilder;

public class MrkpBuild {

    public static void main(String[] args) {
        new MrkpBuild().run();
    }
    
    @SuppressWarnings("serial")
    public void run() {
        final MarkupBuilder mb = new MarkupBuilder();
        
        mb.invokeMethod("html", new Closure<Void>(this) {
            public Void call() {
                mb.invokeMethod("body", new Closure<Void>(this) {
                    public Void call() {
                        
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("class", "main");
                        
                        Object[] args = new Object[] {params, new Closure<Void>(this) {
                            public Void call() {
                                mb.invokeMethod("p", "this is the body");
                                
                                return null;
                            }
                        }};
                        
                        mb.invokeMethod("div", (Object)args);
                        
                        return null;
                    }
                    
                });
                return null;
            }
        });
    }
}


А еще проще - поставить груви и использовать его smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)