В чем разница между «как долго» и «.toLong ()» в Котлине?

Вот пример:

    val a: Int = 6
    val b = a.toLong()
    val c = a as Long

в чем разница между ключевым 9X_operator словом .toLong() и as Long? И как лучше использовать

11
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: В чем разница между «как долго» и «.toLong ()» в Котлине?

a.toLong() вызывает метод toLong для a, поэтому он будет 9X_operator-keyword делать то же, что и метод toLong. Этот метод обычно 9X_kotlin реализуется с помощью собственного кода. Например, на 9X_kotlin JVM это можно реализовать с помощью инструкции 9X_operator-keyword i2l JVM.

Оператор as, с другой стороны, делает 9X_operator-keyword следующее в соответствии с language spec:

Это выражение 9X_operator выполняет проверку во время выполнения, является 9X_operator ли тип времени выполнения E подтипом T, и 9X_operator в противном случае генерирует исключение.

Итак, as выполняет 9X_kotlin проверку только во время выполнения. "преобразование" происходит 9X_operator-keyword только во время компиляции посредством языка, предписывающего, чтобы 9X_operator тип выражения e as T должен быть T.

Что касается системы 9X_operator-keyword типов Kotlin, Int не является подтипом Long, поэтому 9X_operator-keyword эта проверка всегда завершается ошибкой, и 9X_operator-keyword это выражение всегда будет вызывать исключение. Обратите 9X_operator-keyword внимание, что это отличается от Java's type system. где примитив 9X_operator int является подтипом примитива long.

15
0

Ответ #2

Ответ на вопрос: В чем разница между «как долго» и «.toLong ()» в Котлине?

Использование as приводит этот объект к этому 9X_operator-keyword типу. Это работает только тогда, когда это 9X_operator действительно тот тип. Вы увидите, что ваш 9X_kotlin код на самом деле дает сбой там, где вы 9X_kotlin пытаетесь преобразовать Int в Long. Функция toLong() на 9X_operator самом деле превращает его в Long.

7
0