This question already has an answer here:
In Kotlin, what's the difference between start and first?

(1个答案)


上个月关闭。




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

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

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

endInclusive替换last可清除警告。

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

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

最佳答案

IntRange继承类IntProgression并实现接口(interface)ClosedRange<Int>
lastIntProgression类的属性。此类不是通用的,属性的类型为Int,并且没有自定义getter / setter。 last转换为方法getLast(),该方法返回未装箱类型int的值。
endInclusiveClosedRange<Int>接口(interface)的抽象属性。此接口(interface)是通用的,属性的类型定义为T,此外,它在IntRange类中的实现具有自定义的getter(仅返回last)。 endInclusive转换为getEndInclusive()方法,该方法返回盒装类型Integer的值。

关于kotlin - 为什么 `intRange.endInclusive`会产生警告? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60688699/

10-11 22:15