作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 kotlin dsl 作为用户友好的构建器来获取输入和生成数据。有没有办法做相反的事情?
即,将现有数据转换为 dsl ?
这个 kotlin 表示可以转换为 dsl 吗?
val person = Person("John", 25)
val person = person {
name = "John"
age = 25
}
最佳答案
除非你真的很喜欢 {
和一些逗号,下面是一个绝对有效的 Kotlin 代码:
data class Person(
val name: String,
val age: Int
)
val person = Person(
name = "John",
age = 25
)
我似乎非常接近您想要的东西并且开箱即用。
import kotlin.properties.Delegates
data class Person(
val name: String,
val age: Int
)
class PersonDSL{
lateinit var name: String
var age: Int by Delegates.notNull<Int>()
fun toPerson(): Person = Person(this.name, this.age)
}
fun person(config: PersonDSL.() -> Unit): Person{
val dsl = PersonDSL()
dsl.config()
return dsl.toPerson()
}
fun main(){
val person = person {
name = "John"
age = 25
}
println(person) // Person(name=John, age=25)
}
但为什么要这样做?
关于kotlin - 有没有办法使用数据生成kotlin dsl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62497964/
我是一名优秀的程序员,十分优秀!