在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)