Kotlin 以字段名作为输入的自定义查询

Kotlin 以字段名作为输入的自定义查询,kotlin,corda,Kotlin,Corda,我使用的是Corda 4.0,我想用动态列名(colN)和列值(colC)运行一个自定义查询。这是我查询大楼的代码 builder { val index: CriteriaExpression.ColumnPredicateExpression<Any,String> = getField(colN,CarSchemaV1.PersistentCar::class.java).equal(colC) val customCriteria = QueryCrite

我使用的是Corda 4.0,我想用动态列名(colN)和列值(colC)运行一个自定义查询。这是我查询大楼的代码

builder {
     val index: CriteriaExpression.ColumnPredicateExpression<Any,String> = getField(colN,CarSchemaV1.PersistentCar::class.java).equal(colC)
     val customCriteria = QueryCriteria.VaultCustomQueryCriteria(index)
}
builder{
val索引:CriteriaExpression.ColumnPredicateExpression=getField(colN,CarSchemaV1.PersistentCar::class.java).equal(colC)
val customCriteria=QueryCriteria.VaultCustomQueryCriteria(索引)
}
但我在编译时遇到了一个错误

Type parameter bound for L in constructor VaultCustomQueryCriteria<L: PersistableState>(expression: CriteriaExpression<L,Boolean>,...) is not satisfied: inferred typed Any is not a subtype of StatePersistable
构造函数Vault CustomQueryCriteria(表达式:CriteriaExpression,…)中为L绑定的类型参数未满足:推断的类型化Any不是StatePersistable的子类型
这里的问题与您在
CriteriaExpression.columnPredicaeeexpression
的泛型中使用
Any
有关。如错误消息所示,您不应使用
Any
而应使用
StatePersistable

根据文档:
net.corda.core.schemas.StatePersistable
标记接口,用于表示始终具有事务id和索引的状态实体的持久化Corda

您的模式
CarSchemaV1.PersistentCar::class.java
可能实现PersistentState。尝试将其添加到泛型中


val index:CriteriaExpression.columnPedicateeexpression=getField(colN,CarSchemaV1.PersistentCar::class.java).equal(colC)

这似乎不起作用,因为getField返回
CriteriaExpression.columnPedicaeeexpression
,因此无法在索引val中接受,因为它缩小了类型的范围。