在Kotlin倒空
data class UserRto(val lastName: String, val firstName: String, val email: String, val password: String) { constructor() : this("", "", "", "") }
这是最简单的方法来获得没有参数的第二个ctor(对于json序列化)?
有一个约定(只是为了这种情况:)如果所有参数都有默认值,则会生成一个无参数的构造函数:
//Kotlin data class UserRto(val lastName: String = "", val firstName: String = "", val email: String = "", val password: String = "") //Java new UserRto(); new UserRto("a", "a", "a", "a");
你的解决方案与一个明确的空构造函数有一个优点,所有参数必须提供,或不。 但是在大多数情况下这并不是什么大问题,而且很少使用。
您不指定您正在使用哪个JSON反序列化库。 很可能你根本不需要这个二级构造函数,并且可以直接使用包含所有属性作为参数的类构造函数。
- 对于杰克逊,使用Jackson-Kotlin模块 ,它可以自动处理所有Kotlins unqiue情况,包括调用构造函数或工厂的所有参数都是属性的能力(在2.8.x中,这包括用于缺少属性的参数的缺省值JSON)
- 对于Gson,我认为Kotson也可以这样做。
Google也可能会为这些或其他库找到其他人。
那么你只需要:
data class UserRto(val lastName: String, val firstName: String, val email: String, val password: String)
而用Jackson-Kotlin模块,你可以简单地:
val user: UserRto = jacksonObjectMapper().readValue(jsonString)