Найти тему

Преобразование длинное в целое

Оглавление

1. Введение

В Kotlin можно преобразовать значение Long в значение Int. Тем не менее, есть некоторые тонкие различия. Давайте взглянем.

2. Вспомогательная функция toInt()

В Kotlin класс Long имеет полезную вспомогательную функцию toInt(). Используя эту функцию, мы можем преобразовать значение Long в значение Int:

val longValue = 100L
val intValue = longValue.toInt()

Здесь мы преобразуем значение Long в значение Int с помощью функции toInt. Однако у этого преобразования есть ограничения.

3. Проблема усечения

Как мы знаем, Long — это «больший» тип, чем Int. Это означает, что если мы попытаемся преобразовать значение Long, которое меньше Int.MIN_VALUE или больше, чем Int.MAX_VALUE, мы можем получить усеченные результаты.

В частности,
функция toInt() возвращает значение Int, представленное младшими значащими 32 битами заданного значения Long для такого преобразования.

4. Обработка усечения с помощью функции расширения

В некоторых случаях поведение усечения по умолчанию для функции toInt может быть нежелательным. Интересно, что мы можем написать свои собственные функции расширения для достижения желаемого поведения. Например:

fun Long.toIntOrNull(): Int? {
return if (this >= Int.MIN_VALUE && this <= Int.MAX_VALUE) {
toInt()
} else {
null
}
}

В этой функции расширения мы возвращаем ожидаемое значение Int, если значение Long больше, чем Int.MIN_VALUE, и меньше, чем Int.MAX_VALUE. Однако, если значение Long выходит за пределы этого диапазона, вместо этого мы возвращаем null.

Это позволяет вызывающему коду идентифицировать и обрабатывать «сужающие» преобразования относительно проще, чем поведение усечения toInt по умолчанию.

5. Вывод

Простой способ преобразовать значение Long в значение Int — использовать вспомогательную функцию toInt(). Кроме того, чтобы добиться пользовательского поведения усечения, мы также можем написать свои собственные функции расширения.

Оригинал статьи: https://www.baeldung.com/kotlin/long-to-int