【发布时间】:2016-07-08 12:54:02
【问题描述】:
您好,我是 Kotlin 世界的新手。我喜欢我目前所看到的,并开始考虑将我们在应用程序中使用的一些库从 Java 转换为 Kotlin。
这些库充满了带有 setter、getter 和 Builder 类的 Pojo。现在我用谷歌搜索找到在 Kotlin 中实现构建器的最佳方法,但没有成功。
第二次更新:问题是如何在 Kotlin 中为带有一些参数的简单 pojo 编写 Builder 设计模式?下面的代码是我尝试编写java代码,然后使用eclipse-kotlin-plugin转换成Kotlin。
class Car private constructor(builder:Car.Builder) {
var model:String? = null
var year:Int = 0
init {
this.model = builder.model
this.year = builder.year
}
companion object Builder {
var model:String? = null
private set
var year:Int = 0
private set
fun model(model:String):Builder {
this.model = model
return this
}
fun year(year:Int):Builder {
this.year = year
return this
}
fun build():Car {
val car = Car(this)
return car
}
}
}
【问题讨论】:
-
你需要
model和year是可变的吗?在创建Car之后您会更改它们吗? -
我猜它们应该是不可变的。另外,您要确保它们都设置了而不是空的
-
您也可以使用这个github.com/jffiorillo/jvmbuilder Annotation Processor 自动为您生成构建器类。
-
@JoseF 将它添加到标准 kotlin 的好主意。它对于用 kotlin 编写的库很有用。
-
大多数答案都忽略了构建器的一个基本但重要的用途,即增量构建一个不可变对象。这有无数种用途,例如,在解析输入时。在这种情况下,为每个事件创建一个新的数据类将是完全浪费的。