【发布时间】:2017-08-06 22:04:56
【问题描述】:
我有一个基本类型 DbType,它可以扩展我的模型,如下所示:
interface DbType {
fun <T : Any> field() = PropertyMapper<T>()
}
PropertyMapper 类是这样实现的:
class PropertyMapper<out T : Any> internal constructor() {
@Suppress("UNCHECKED_CAST") operator fun getValue(inst: DbType, prop: KProperty<*>): T {
return ImplementationDetail.values?.get(prop.name) as T? ?: throw NullPointerException("No such ${prop.name} in type ${inst::class}")
}
operator fun provideDelegate(inst: DbType, prop: KProperty<*>): ReadOnlyProperty<DbType, T> {
TODO()
}
}
根据 kotlin 文档中的this 条目,我应该能够通过在属性委托给的类中添加运算符函数provideDelegate 来提供我自己的ReadOnlyProperty<R, T>。但是,当我实例化一个实现/扩展DbType 的对象时,永远不会调用运算符函数provideDelegate。 “getValue”部分工作正常,但我想在创建对象时拦截属性委托创建。知道我做错了什么吗?这是一个示例类:
class BasicUserInfo : DbType {
val username by field<String>()
}
【问题讨论】: