Почему `intRange.endInclusive` выдает предупреждение? - PullRequest
2 голосов
/ 15 марта 2020

Следующий код выдает предупреждение о неисправности «Можно заменить на распакованный last»:

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

Screenshot

Замена endInclusive на last снимает предупреждение.

Но почему? Что не так с этим кодом? Я ожидал, что endInclusive будет правильным свойством для IntRange.

(я использую Kotlin 1.3.70 в Android Studio 3.6.1.)

1 Ответ

2 голосов
/ 15 марта 2020

Класс IntRange наследует класс IntProgression и реализует интерфейс ClosedRange<Int>.

last является свойством класса IntProgression. Этот класс не является обобщенным c, тип свойства - Int, и у него нет пользовательского метода получения / установки. last переводится в метод getLast(), который возвращает значение незаписанного типа int.

endInclusive является абстрактным свойством интерфейса ClosedRange<Int>. Этот интерфейс является обобщенным c, тип свойства определен как T, и, кроме того, его реализация в классе IntRange имеет собственный метод получения (который просто возвращает last). endInclusive переводится в метод getEndInclusive(), который возвращает значение упакованного типа Integer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...