Kotlin数据类可以有多个构造函数吗?

我知道数据类就像kotlin中的简单模型,默认情况下是getter和setter,它们就像这样简单:

data class User(val name: String, val age: Int) 

是否可以声明该数据类的第二个构造函数

4 Solutions collect form web for “Kotlin数据类可以有多个构造函数吗?”

是的,但每个变量都应该初始化,所以你可以在你的数据类构造函数中设置默认参数,如下所示:

 data class Person(val age: Int, val name: String = "Person without name") 

现在你可以用两种方法创建这个数据类的实例

  • Person(30)
  • Person(20, "Bob")

Kotlin数据类必须具有至少定义一个成员的主构造函数。 除此之外,您可以添加辅助构造函数,如类和继承 – 辅助构造函数中所述 。

对于你的类,以及示例二级构造函数:

 data class User(val name: String, val age: Int) { constructor(name: String): this(name, -1) { ... } } 

请注意,辅助构造函数必须在其定义中委托给主构造函数。

虽然许多次要构造函数通用的东西可以通过具有参数的默认值来解决。 在上面的情况下,你可以简化为:

 data class User(val name: String, val age: Int = -1) 

如果从Java中调用这些函数 ,则应该阅读关于如何生成重载的Java互操作Java调用Kotlin文档,有时也可以阅读其他特殊情况下的NoArg编译器插件 。

更新数据类的答案:

是的,你可以,但你将需要委托一切的主要构造函数

 data class User(val name: String, val age: Int) { constructor(name: String): this(name, -1) { } constructor(age: Int): this("Anon", age) { } } // Anon name: Anon println("Anon name: " + User(30).name) // No age: -1 println("No age: " + User("Name").age) // Name: Name age: 20 val u = User("Name", 20) println("Name: " + u.name + " age: " + u.age) 

您也可以像Alexey那样在主构造器中设置默认值。

是的,我们可以使用像下面的代码,而在数据类的主要构造函数应该有最小的一个参数。

 data class SampleData(val name: String, val age: Int) { constructor(name: String, age: Int, email: String) : this(name, age) { } } 
  • Kotlin无效检查错误
  • 我如何通过反思来获得物业的价值?
  • 从Java超类访问静态字段
  • JPA,Spring Data和Kotlin - 保存记录
  • 科特林。 如何检查是否可以通过reflection字段?
  • 字符串到位图在Kotlin
  • 如何使用Mockito Kotlin片段/活动来模拟kotlinx.android.synthetic的意见
  • 春天的数据mongodb和kotlin
  • 未解决的参考:T
  • 改进API调用:如何确保在进行api调用后该值不为空?
  • 适用于Android的Kotlin。 烤面包
  • Kotlin language will be the best programming language for Android.