fun main(args:Array<String>):Unit{

    val x = a{
aa{
+"01.01"
+"01.02"
}
aa{
+"02.01"
+"02.02"
}
}
print(x)
} fun a(p:A.()->Unit):A { val a = A()
a.p()
return a;
} class A { val children=arrayListOf<AA>() fun aa(p:AA.()->Unit){ val aa = AA();
aa.p();
children.add(aa);
} override fun toString(): String {
val builder = StringBuilder("<a>")
children.forEach { builder.append(it.toString()) }
builder.append("\r\n</a>")
return builder.toString();
} } class AA {
val children=arrayListOf<String>() operator fun String.unaryPlus() {
children.add("\r\n\t\t<text>${this}</text>")
} override fun toString(): String {
val builder = StringBuilder("\r\n\t<aa>")
children.forEach { builder.append(it.toString()) }
builder.append("\r\n\t</aa>")
return builder.toString();
}
}

执行结果

<a>
<aa>
<text>01.01</text>
<text>01.02</text>
</aa>
<aa>
<text>02.01</text>
<text>02.02</text>
</aa>
</a>
import java.util.*

import List.Companion.list
import Map.Companion.map fun main(args: Array<String>): Unit { val x = list {
values("a", "b", "c")
list {
values("a", "b", "c")
map {
values("name" to "Fred")
}
}
map {
values(
"name" to "Fred",
"age" to "28",
"fav" to list {
values("java", "c++", "kotlin")
}
)
}
} val y = map {
values("languages" to list {
values("java", "c++", "perl")
values("scala","kotlin","ruby")
})
} println(x)
println(y)
} class List : ArrayList<Any>() { companion object { fun list(p: List.() -> Unit): List {
val l = List()
l.p()
return l
}
} fun values(vararg x: Any) {
this.addAll(x)
} fun list(p: List.() -> Unit) {
val l = List()
l.p()
this.add(l as Any)
} fun map(p: Map.() -> Unit) {
val m = Map()
m.p()
this.add(m as Any)
} } class Map : HashMap<String, Any>() { companion object { fun map(p: Map.() -> Unit): Map {
val m = Map()
m.p()
return m
}
} fun values(vararg x: Pair<String, Any>) {
this.putAll(x)
} fun list(p: List.() -> Unit): List {
val l = List()
l.p()
return l;
} fun map(p: Map.() -> Unit): Map {
val m = Map()
m.p()
return m } }

执行结果

[a, b, c, [a, b, c, {name=Fred}], {name=Fred, fav=[java, c++, kotlin], age=28}]
{languages=[java, c++, perl, scala, kotlin, ruby]}

  

  

Kotlin Groovy Style Builder的更多相关文章

  1. Groovy 学习手册(1)

    1. 需要安装的软件 Java / Groovy 对应 Java 和 Groovy,你需要安装以下软件: Java JDK,例如 JDK 8 IDE,例如 Eclipse,NetBeans 8 Gro ...

  2. Kotlin Android项目静态检查工具的使用

    Kotlin Android项目静态检查工具的使用 Kotlin Android项目可用的静态检查工具: Android官方的Lint, 第三方的ktlint和detekt. 静态检查工具 静态检查工 ...

  3. 高效快捷解决一个TextView显示多种字体的控件SpannableTextView

    这个控件本人强烈推荐,它会使得布局非常的简单且高效: 下面这个布局如果是你,你会用多少层?多少控件生成? 告诉你吧,一个SpannableTextView控件就搞定了! 它把TextView和Span ...

  4. [AFUI]App Framework

    ---------------------------------------------------------------------------------------------------- ...

  5. WPF第三方控件Telerik

    帮助文档:http://www.telerik.com/help/wpf/gridview-selection-via-checkbox.html Telerik专注于微软.Net平台的表示层与内容管 ...

  6. 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

     随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...

  7. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  8. java之项目构建工具Gradle

    介绍 Java 作为一门世界级主流编程语言,有一款高效易用的项目管理工具是 java 开发者共同追求的心愿和目标.显示 2000 年的 Ant,后有 2004 年的 Maven 两个工具的诞生,都在 ...

  9. jvm虚拟机---执行引擎子系统

    Java虚拟机只与Class文件相关联,它规定了Class文件应该具有的格式,而不论该文件是由什么语言编写并编译而来.所以,任何语言只要能够最终编译成符合Java虚拟机要求的Class文件,就可以运行 ...

随机推荐

  1. Web Performance Test : 为Request的Post参数名添加XPath支持

    问题描述 本文的标题看起来有些含糊其辞,这里我需要把问题阐述得更加清楚.这是我们使用VSTS进行Web Performance Test时,Asp.net造成的特定问题(也许其他开发工具或插件也会造成 ...

  2. WebForm session,cookies

    session : Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web页之 ...

  3. NOIP2016普及组复赛解题报告

    提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰. (附:洛谷题目链接 T1:https://www.luogu.org/problem/show?pid=1909 T2:h ...

  4. kali Linux添加add-apt-repository

    Debian让用户可以通过一个名为add-apt-repository的应用程序,添加和使用PPA软件库,不过Kali Linux在其默认的程序包列表中并不含有该应用程序.就Kali而言,由于这是个特 ...

  5. Webpack参考资料

    学习是一种进步,只有不断的向别人学习,才能提升自己.三人行必有我师焉 1. http://www.cnblogs.com/zhengjialux/p/5861845.html

  6. 【BZOJ】3436: 小K的农场

    3436: 小K的农场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 938  Solved: 417[Submit][Status][Discuss ...

  7. localhost访问错误Forbidden You don't have permission to access / on this server.解决办法(亲测)

    在httpd.conf文件下找到这段: <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow D ...

  8. go排序

    补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了. go 的排序思路和 c 和 c++ 有些差别. c 默认是对数组进行排序, c++ 是对一个序列进行排序, go 则更宽泛一 ...

  9. 关于C语言结构体,指针,声明的详细讲解。——Arvin

    关于结构体的详细分析 只定义结构体 struct Student { int age; char* name; char sex;//结构体成员 };//(不要忘记分号) Student是结构体的名字 ...

  10. Freemaker 自定义函数

    定义格式如下: <#function name param1 param2 ... paramN> ... <#return returnValue> ... </#fu ...