PostAddress address = new PostAddress();
address.setCountry("Россия");
address.setZipCode("99099");
User user = new User();
user.setName("Анонимус");
user.setPostAddress(address);
正如你所看到的,这里没有太多有用的信息,所有的仪式代码都可以归因于语法噪音,阻止人们感知有意义的信息,比如地址,你甚至不会注意到 User 和 PostAddress 之间的联系。
Kotlin 允许您在不使用 get / set 方法的情况下访问类属性,因此相同的条目将在那里更简单一些:
val address = PostAddress()
address.country = "Россия"
address.zipCode = "99099"
val user = User()
user.name = "Анонимус"
user.postAddress = address
但是当使用类型安全的构建器时,我们可以这样写:
val user = User {
name = "Анонимус"
postAddress {
country = "Россия"
zipCode = "99099"
}
}
为了能够以这种方式构造 User 类的实例,简而言之,我们必须将类本身定义如下:
class User {
var name: String? = null
var postAddress: PostAddress? = null
constructor(block123: User.()->Unit) {
block123()
}
fun postAddress(init111: PostAddress.()->Unit) {
val postAddress = PostAddress()
postAddress.init111()
this.postAddress = postAddress
}
}
指定的构造类似于类型安全 builder的声明,以显示在 Java 中创建两个相关对象的典型情况时可能需要考虑的内容:
正如你所看到的,这里没有太多有用的信息,所有的仪式代码都可以归因于语法噪音,阻止人们感知有意义的信息,比如地址,你甚至不会注意到 User 和 PostAddress 之间的联系。
Kotlin 允许您在不使用 get / set 方法的情况下访问类属性,因此相同的条目将在那里更简单一些:
但是当使用类型安全的构建器时,我们可以这样写:
为了能够以这种方式构造 User 类的实例,简而言之,我们必须将类本身定义如下:
故意选择名称 block12345 和 init111 以表明没有使用语言关键字。