如何在Kotlin Android中为数据类创建空构造函数

我有一个数据类10 +参数,我想用一个空的构造函数初始化数据类,并使用setter设置只有几个参数的值,并传递对象到服务器。

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) 

但它需要在创建构造函数时传递所有参数。 我怎样才能像上面那样简化?

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

你有两个选择:

  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>() ) } 

如果你不依赖于Activity类的copy或者equals ,或者根本不使用自动生成的data 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>() } 

并不是每个DTO都需要成为一个data class ,反之亦然。 事实上,根据我的经验,我发现数据类在涉及一些复杂业务逻辑的领域特别有用。