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. Hibernate之全面认识

    Hibernate体系架构 Hibernate通过配置文件管理底层的JDBC连接,将用户从原始的JDBC释放出来,使得用户无需再关注底层的JDBC操作,而是以面向对象的方式进行持久化操作.这种全面的解 ...

  2. HTML 5 应用程序缓存(下)

    Manifest 文件manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容). manifest 文件可分为三个部分: CACHE MANIFEST - 在此标题下列出的 ...

  3. mkforsela

    -- #!/bin/bash #sela.gao # #History: # .根据每行查找出来的结果push进去手机 #result: # :没有编译生成文件 # :没有设置编译环境 echoMsg ...

  4. <<Windows via C/C++>>学习笔记 —— 线程优先级【转】

    转自:http://www.cnblogs.com/wz19860913/archive/2008/08/04/1259807.html 每个线程都有一个“优先级”,范围是0-31,0为最低优先级,3 ...

  5. Windows2012 显示我的电脑

    从Windows2012开始,微软取消了服务器桌面个性化选项,如何重新调出配置界面,可以使用微软命令调出.具体方法如下: 1.同时按住键盘上的“Windows键”+“R”,调出运行窗口.在运行窗口输入 ...

  6. 参考:鼠标点击事件(Selenium)

    1.鼠标右键点击操作:Actions action = new Actions(driver) ;action.contextClick(driver.findElement(By.xpath(xpa ...

  7. sql server 查询表结构

    --查询表结构start SELECT 序号 = a.colorder,字段名称 = a.name,字段描述 = f.value, 标识 then '√' else '' end, 主键 FROM s ...

  8. laravel select 传参

    传值: $params['select'] = 'taobao_id,title,image,price,coupon_deduct,coupon_condition'; 接受参数 $result = ...

  9. 嵌入式Linux学习笔记(0)基础命令。——Arvin

    学习记录: 到今天为止ARM裸机开发学习进程:1.2.1-1.2.14 预科班知识Linux介绍学习进程:0.2.1-0.2.6 学习内容笔记: 学习了Linux的开发方式的优劣介绍 学习了常用文件夹 ...

  10. sublime jsx 格式化工具

    1.到Sublime Text 3\Packages\ 目录下 git clone https://github.com/ionutvmi/sublime-jsfmt jsfmt 2.重启sublim ...