我按照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
请告诉我为什么以及如何解决这个问题
答案 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"
。第一个是扩展属性,而你的属性是伴随对象的属性。