В чем разница между «как долго» и «.toLong ()» в Котлине?
Вот пример:
val a: Int = 6
val b = a.toLong()
val c = a as Long
в чем разница между ключевым 9X_operator словом .toLong() и as Long? И как лучше использовать
Ответ #1
Ответ на вопрос: В чем разница между «как долго» и «.toLong ()» в Котлине?
a.toLong()
вызывает метод toLong
для a
, поэтому он будет 9X_kotlin делать то же, что и метод toLong
. Этот метод обычно 9X_operator реализуется с помощью собственного кода. Например, на 9X_operator JVM это можно реализовать с помощью инструкции 9X_operator-keyword i2l
JVM.
Оператор as
, с другой стороны, делает 9X_operator-keyword следующее в соответствии с language spec:
Это выражение 9X_kotlin выполняет проверку во время выполнения, является 9X_kotlin ли тип времени выполнения
E
подтипомT
, и 9X_operator-keyword в противном случае генерирует исключение.
Итак, as
выполняет 9X_kotlin проверку только во время выполнения. "преобразование" происходит 9X_operator только во время компиляции посредством языка, предписывающего, чтобы 9X_operator тип выражения e as T
должен быть T
.
Что касается системы 9X_operator-keyword типов Kotlin, Int
не является подтипом Long
, поэтому 9X_kotlin эта проверка всегда завершается ошибкой, и 9X_kotlin это выражение всегда будет вызывать исключение. Обратите 9X_kotlin внимание, что это отличается от Java's type system. где примитив 9X_operator int
является подтипом примитива long
.
Ответ #2
Ответ на вопрос: В чем разница между «как долго» и «.toLong ()» в Котлине?
Использование as
приводит этот объект к этому 9X_operator типу. Это работает только тогда, когда это 9X_operator действительно тот тип. Вы увидите, что ваш 9X_kotlin код на самом деле дает сбой там, где вы 9X_operator-keyword пытаетесь преобразовать Int
в Long
. Функция toLong()
на 9X_operator самом деле превращает его в Long
.
-
3
-
4
-
5
-
4
-
3
-
2
-
5
-
9
-
3
-
4
-
9
-
4
-
6
-
3
-
9
-
4
-
2
-
5
-
7
-
4
-
3
-
2
-
5
-
5
-
4
-
6
-
4
-
3
-
2
-
3
-
9
-
3
-
5
-
4
-
2
-
4
-
3
-
2
-
5
-
5
-
3
-
2
-
4
-
2
-
3
-
3
-
2
-
3
-
1
-
9