无法为model.Products初始化对象解析器,找不到可接受的构造函数

时间:2017-11-09 06:59:33

标签: kotlin anko

我按照Stress-free SQLite with Anko学习Kotlin,所以我创建了课程

data class Products(val id: Long, val name: String, val description: String, val price: Long, val image: String, val status: String, val type: String ) {

    companion object {
        val TABLE_NAME          = "gdbl_products"
        val COLUMN_ID           = "id"
        val COLUMN_NAME         = "name"
        val COLUMN_DESCRIPTION  = "description"
        val COLUMN_PRICE        = "price"
        val COLUMN_IMAGE        = "image"
        val COLUMN_STATUS       = "status"
        val COLUMN_TYPE         = "type"
    }
}

在Activity.kt中,我打电话:

var rowParser = classParser<Products>() => exception show: Can't initialize object parser for model.Products, no acceptable constructors found

请告诉我为什么以及如何解决这个问题

1 个答案:

答案 0 :(得分:1)

classParser<T>()这一部分的implementation看起来像

val applicableConstructors = clazz.declaredConstructors.filter { ctr ->
    if (ctr.isVarArgs || !Modifier.isPublic(ctr.modifiers)) return@filter false
    val types = ctr.parameterTypes
    return@filter types != null && types.isNotEmpty() && types.all(::hasApplicableType)
}

所以你必须找出,为什么你的构造函数实际上并不符合这个要求。它不应该使用 varArgs ,必须是公共的并且必须具有适用的参数类型。乍一看,一切看起来都很好,但你可以通过删除单个参数来测试哪些部分是错误的。

此外,也许不相关,该示例定义了随播广告中的val Book.COLUMN_ID = "id",而您只定义了val COLUMN_ID = "id"。第一个是扩展属性,而你的属性是伴随对象的属性。