第三十節 DSL中集合
如果要實現這種定義方式呢?(可以有多個地址,類似淘寶的收貨地址)
person {
name = "張三"
age = 10
addresses{
address {
city = "北京市"
street = "北三環街道"
number = 100000
}
address {
city = "北京市"
street = "北三環街道"
number = 100000
}
}
}
程式碼實現:
fun main(args: Array<String>) {
var p=person {
name = "張三"
age = 10
addresses{
address {
city = "北京市"
street = "北三環街道"
number = 100000
}
address {
city = "北京市"
street = "北三環街道"
number = 100000
}
}
}
println(p)
}
fun PersonBuilder.addresses(block:ArrayList<Address>.()->Unit)
{
//需要定義個集合,賦值給personBuilder的addresses
var list=ArrayList<Address>()
block.invoke(list)
this.addresses=list
}
/**
* 定義address方法
*/
fun ArrayList<Address>.address(block:AddressBuilder.()->Unit)
{
var addressBuilder=AddressBuilder()
block.invoke(addressBuilder)
this.add(Address(addressBuilder.city,addressBuilder.street,addressBuilder.number))
}
/**
* 首先定義一個方法person,這個返回定義好的Person物件
*/
fun person(block:PersonBuilder.()->Unit):Person
{
var personBuilder=PersonBuilder()
block.invoke(personBuilder)
return Person(personBuilder.name,personBuilder.age,personBuilder.addresses)
}
/**
* 我們直接定義成data型別,便於列印
* 城市、街道、街道號
*/
data class Address(val city:String?,val street:String?,val number:Int?)
data class AddressBuilder(var city:String?=null,var street:String?=null,var number:Int?=null)
/**
* 姓名、年齡、地址
*/
data class Person(val name:String?,val age:Int?,val addresses: ArrayList<Address>?)
data class PersonBuilder(var name:String?=null,var age:Int?=null,var addresses: ArrayList<Address>?=null)
輸出:
相關文章
- Kotlin學習手記——集合變換、序列、聚合、SAM轉換、DSLKotlin
- Query DSL
- Java集合詳解8:Java集合類細節精講,細節決定成敗Java
- Gradle Kotlin DSL 1.0GradleKotlin
- 構建Recyclerview DSLView
- ElasticSearch DSL 查詢Elasticsearch
- 【Elasticsearch學習】DSL搜尋大全(持續更新中)Elasticsearch
- 第三十二節:ShardingCore框架簡介、路由詳解、分表詳解實操GC框架路由
- Gradle Kotlin DSL遷移指南GradleKotlin
- java中的Map集合Java
- C#中的集合C#
- Java中List集合轉Map集合報錯:Duplicate keyJava
- 白話 Ruby 與 DSL 以及在 iOS 開發中的運用iOS
- 集合:安卓開發中怎麼注意細節?一文告訴你四十個安卓
- 【DSL】Elasticsearch之Analyze(分析過程)Elasticsearch
- Elasticsearch Query DSL查詢入門Elasticsearch
- Groovy 是一門 DSL 語言
- 物件導向OO與DSL - typeswitch物件
- Gradle Kotlin DSL , 你知道它嗎?GradleKotlin
- Java集合中的排序方法Java排序
- java中展開樹集合Java
- python中的集合與字典Python
- Python中的不可變集合Python
- Java集合中的框架2Java框架
- 沒有人比我更會使用集合!對, 是dart中的集合Dart
- 動態介面:DSL&佈局引擎
- 藉助 DSL 來簡化 Loadgen 配置
- Elasticsearch ILM DSL 索引生命週期管理Elasticsearch索引
- elasticsearch Request Body 與 Query DSL詳解Elasticsearch
- 初等數學O 集合論基礎 第三節 序關係
- 第三十五節:ShardingCore框架高階(分頁、動態追加分庫分表、批次操縱、事務等等)GC框架
- 集合的介紹(正在更新中)
- Java中List集合效能比較Java
- java中避免集合死鏈呼叫Java
- Kotlin 中的集合(List中沒有了addAll())Kotlin
- 第三十九天學習javaJava
- Java集合中List,Set以及Map等集合體系詳解(史上最全)Java
- 1024程式設計師節最新福利之2018最全java資料集合程式設計師Java