首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >空间不能选择构造函数,因为多个构造函数都是合适的错误。

空间不能选择构造函数,因为多个构造函数都是合适的错误。
EN

Stack Overflow用户
提问于 2017-06-19 00:39:11
回答 10查看 19.9K关注 0票数 23

我试图在我的android项目中实现持久库,但是在编译时捕捉到这个错误:

错误:空间不能选择构造函数,因为多个构造函数是合适的。尝试用@Ignore对不需要的构造函数进行注释。

错误码:

代码语言:javascript
运行
复制
@Entity
data class Site(
        var name: String = "",
        var url: String = "",
        @PrimaryKey(autoGenerate = true) var id: Long = 0)
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2017-06-19 00:39:11

我犯了这个错误,因为Kotlin显然会为一个带有默认值的Kotlin构造函数生成多个Java构造函数。工作代码参见下一页:

代码语言:javascript
运行
复制
@Entity
data class Site(
        var name: String,
        var url: String,
        @PrimaryKey(autoGenerate = true) var id: Long)
票数 15
EN

Stack Overflow用户

发布于 2017-10-02 13:54:43

上述解决方案中没有一个是好的,因为它们可以工作,但可能会导致错误。

Kotlin的数据类使用默认构造函数生成几个方法。这意味着等于()hashCode()toString()componentN()函数副本()是使用分配给构造函数的属性生成的。

使用上述解决方案,如

代码语言:javascript
运行
复制
@Entity data class Site(@PrimaryKey(autoGenerate = true) var id: Long) {
    @Ignore constructor() : this(0)
    var name: String = ""
    var url: String = ""
} 

仅为id生成上述所有列出的方法。使用等于会导致不必要的质量,与toString()相同。要解决这一问题,需要在构造函数中处理所有属性,并使用忽略类似的方法添加第二个构造函数

代码语言:javascript
运行
复制
@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这样的方法。只有此解决方案才能在运行时避免不必要的错误。

票数 10
EN

Stack Overflow用户

发布于 2017-06-30 18:41:30

这对我起了作用:

代码语言:javascript
运行
复制
@Entity
data class Site(
    @PrimaryKey(autoGenerate = true) var id: Long = 0),
    var name: String = "",
    var url: String = "",
    @Ignore var ignored: String? = null
)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44620835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档