Tag: 通用方差

当声明站点协变时,强制types参数在使用地点不变

我正在KProperty1上构建一个扩展函数。 即使KProperty1在types参数R是协变的,该函数也需要接受扩展属性( R )的值types的参数。 一个稍微人为的例子将是以下,虽然我的使用更合法。 data class Data(val value: String) fun KProperty1.setMagically(value: V) { this.javaField?.set(null, value) } fun test() { // I would like this to fail to compile Data::value.setMagically(190) } 似乎编译器推断出R的typesAny ,这是完全有效的,因为KProperty1 : KProperty1 我想要说的是,对于我的具体情况,我确实希望V是不变的。 我知道你可以使用out和in作为差异的宽度,但我无法弄清楚如何指定我想重写KProperty1上的协变注释,这种情况下是不变的。 值得注意的是,它与KMutableProperty1效果很好,因为它在R中是不变的。 但是我的代码也需要使用非可变属性。 对于上下文,我建立一些东西,生成数据库查询,这就是为什么我需要的价值是属性types的子类,即使我没有写入属性,但这个问题比我的具体,物业处理案件。