Tag: 逆转

Kotlin的逆变

我从来没有真正理解Java中的泛型,所以似乎是Kotlin的情况。 考虑下面的代码片段(这是一个人为的例子): class AnyComparator: Comparator<Any> { override fun compare(o1: Any, o2: Any): Int { TODO("not implemented") } } fun <T> test() { val x: Comparator<in Double> = AnyComparator() // OK! val y: Comparator<in T> = AnyComparator() // Compilation error } 第二个分配失败,出现错误 Type mismatch. Required: kotlin.Comparator<in T> Found: AnyComparator 现在,如果我理解正确, in修饰符指示T只被泛型类型Comparator (它使逆变)消耗,所以我应该能够分配任何具有类型参数E Comparator ,它是T的基类。 基于此,我应该能够将AnyComparator分配给变量x和y ,因为Any类型是Kotlin中每个类的基类。 […]