为什么`intRange.endInclusive`会产生警告?

时间:2020-03-15 00:40:12

标签: kotlin

以下代码会产生皮棉警告:“可以用未装箱的last替换”:

fun foo() {
    val range = 1..3
    range.endInclusive
}

Screenshot

endInclusive代替last会清除警告。

但是为什么呢?此代码有什么问题?我本来希望endInclusive是用于IntRange的正确属性。

(我正在Android Studio 3.6.1中使用Kotlin 1.3.70)

1 个答案:

答案 0 :(得分:2)

IntRange继承类IntProgression并实现接口ClosedRange<Int>

last是类IntProgression的属性。此类不是通用的,属性的类型为Int,并且没有自定义的getter / setter方法。 last转换为方法getLast(),该方法返回未装箱类型int的值。

endInclusive是接口ClosedRange<Int>的抽象属性。该接口是通用的,属性的类型定义为T,此外,其在类IntRange中的实现具有自定义的getter(仅返回last)。 endInclusive转换为方法getEndInclusive(),该方法返回框式Integer的值。