我试图在我的android项目中实现持久库,但是在编译时捕捉到这个错误:
错误:空间不能选择构造函数,因为多个构造函数是合适的。尝试用@Ignore对不需要的构造函数进行注释。
错误码:
@Entity
data class Site(
var name: String = "",
var url: String = "",
@PrimaryKey(autoGenerate = true) var id: Long = 0)
发布于 2017-06-19 00:39:11
我犯了这个错误,因为Kotlin显然会为一个带有默认值的Kotlin构造函数生成多个Java构造函数。工作代码参见下一页:
@Entity
data class Site(
var name: String,
var url: String,
@PrimaryKey(autoGenerate = true) var id: Long)
发布于 2017-10-02 13:54:43
上述解决方案中没有一个是好的,因为它们可以工作,但可能会导致错误。
Kotlin的数据类使用默认构造函数生成几个方法。这意味着等于()、hashCode()、toString()、componentN()函数和副本()是使用分配给构造函数的属性生成的。
使用上述解决方案,如
@Entity data class Site(@PrimaryKey(autoGenerate = true) var id: Long) {
@Ignore constructor() : this(0)
var name: String = ""
var url: String = ""
}
仅为id生成上述所有列出的方法。使用等于会导致不必要的质量,与toString()相同。要解决这一问题,需要在构造函数中处理所有属性,并使用忽略类似的方法添加第二个构造函数
@Entity data class Site(
@NonNull @PrimaryKey(autoGenerate = true) var id: Long,
var name: String = "",
var url: String = "") {
@Ignore constructor(id = 0, name = ", url = "") : this()
}
您应该记住,您通常使用数据类来拥有像toString和copy这样的方法。只有此解决方案才能在运行时避免不必要的错误。
发布于 2017-06-30 18:41:30
这对我起了作用:
@Entity
data class Site(
@PrimaryKey(autoGenerate = true) var id: Long = 0),
var name: String = "",
var url: String = "",
@Ignore var ignored: String? = null
)
https://stackoverflow.com/questions/44620835
复制相似问题