Kotlin Androidでデータクラスの空のコンストラクタを作成する方法 質問する

Kotlin Androidでデータクラスの空のコンストラクタを作成する方法 質問する

Kotlin データ クラスで 10 個以上の変数が宣言されており、Java で通常行うように、空のコンストラクターを作成したいと考えています。

データクラス:

data class Activity(
    var updated_on: String,
    var tags: List<String>,
    var description: String,
    var user_id: List<Int>,
    var status_id: Int,
    var title: String,
    var created_at: String,
    var data: HashMap<*, *>,
    var id: Int,
    var counts: LinkedTreeMap<*, *>,
)

想定される使用方法:

val activity =  Activity();
activity.title = "New Computer"
sendToServer(activity)

しかし、データ クラスでは、コンストラクターの作成時にすべての引数を渡す必要があります。これを Java POJO クラスのコンストラクターのように簡素化するにはどうすればよいでしょうか?

val activity =  Activity(null,null,null,null,null,"New Computer",null,null,null,null)
sendToServer(activity)

ベストアンサー1

ここでは 2 つのオプションがあります。

  1. それぞれにデフォルト値を割り当てるプライマリコンストラクタパラメータ:

    data class Activity(
        var updated_on: String = "",
        var tags: List<String> = emptyList(),
        var description: String = "",
        var user_id: List<Int> = emptyList(),
        var status_id: Int = -1,
        var title: String = "",
        var created_at: String = "",
        var data: HashMap<*, *> = hashMapOf<Any, Any>(),
        var id: Int = -1,
        var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>()
    ) 
    
  2. 宣言するセカンダリコンストラクタパラメータがない:

    data class Activity(
        var updated_on: String,
        var tags: List<String>,
        var description: String,
        var user_id: List<Int>,
        var status_id: Int,
        var title: String,
        var created_at: String,
        var data: HashMap<*, *>,
        var id: Int,
        var counts: LinkedTreeMap<*, *>
    ) {
        constructor() : this("", emptyList(), 
                             "", emptyList(), -1, 
                             "", "", hashMapOf<Any, Any>(), 
                             -1, LinkedTreeMap<Any, Any>()
                             )
    }
    

クラスに依存しない場合、copyまたは自動生成されたメソッドをまったく使用しない場合は、次のように通常のクラスを使用できます。equalsActivitydata class

class ActivityDto {
    var updated_on: String = "",
    var tags: List<String> = emptyList(),
    var description: String = "",
    var user_id: List<Int> = emptyList(),
    var status_id: Int = -1,
    var title: String = "",
    var created_at: String = "",
    var data: HashMap<*, *> = hashMapOf<Any, Any>(),
    var id: Int = -1,
    var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>()
}

すべてではない個人情報は である必要がありdata class、その逆も同様です。実際、私の経験では、データ クラスは複雑なビジネス ロジックが関係する領域で特に役立つことがわかりました。

おすすめ記事