2016-06-15 2 views
2
data class UserRto(val lastName: String, val firstName: String, val email: String, val password: String) { 
    constructor() : this("", "", "", "") 
} 

これは、引数なしで2番目のctorを取得する最も簡単な方法ですか(json desrialization用)?Kotlinの空のセカンドctor

+0

間違った質問をして、そしてXYの問題(のhttpされている可能です。 // xyproblem.info/)...デフォルトの空のコンストラクタを持たないKotlinデータクラスのJSONをどのように非直列化するのですか?もしそうなら、私は以下の答えを加えました。 –

答えて

4

すべてのパラメータがデフォルト値を持っている場合は、ちょうどその場合の規則は(:)パラメータなしのコンストラクタが生成されることがあります:明示的な空のコンストラクタと

//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"); 

あなたのソリューションは、すべてのパラメータがなければなりません利点を持っています提供された、または提供されない。しかし、ほとんどの場合、大したことではなく、めったに使用されません。

3

使用しているJSON逆シリアル化ライブラリを指定していません。このセカンダリコンストラクタはまったく必要なく、すべてのプロパティをパラメータとして含むクラスコンストラクタで直接動作する可能性があります。ジャクソン

  • 、自動的にすべてのパラメータがプロパティであるとコンストラクタまたはファクトリを呼び出す機能を含むKotlins unqiueのすべての場合を処理(および2.8.xでは、これはのために使用されるパラメータのデフォルト値を含むJackson-Kotlin moduleを使用
  • Gsonの場合、私はKotsonが同じことをするかもしれないと思います。

Googleはこれらのライブラリや他のライブラリでも他のものを見つけるかもしれません。

その後、あなただけの必要があるでしょう:

data class UserRto(val lastName: String, val firstName: String, val email: String, val password: String) 

そして、単にあなたが希望ジャクソンKotlinモジュールと:

val user: UserRto = jacksonObjectMapper().readValue(jsonString) 
関連する問題