0
在java中,我們可以分配給int
double
,例如double x = 123
;科特林 - 數字類型的自動轉換
在科特林,我們得到了一個編譯錯誤。
問題:我們能否實現自動轉換功能在kotlin
?爲什麼kotlin
默認沒有此功能?
var x: Double = 123; // ERROR
再舉一個例子:
fun foo(x: Double) { }
fun main(args: Array<String>) {
foo(123.0); // OK
foo(123); // ERROR
}
UPDATE:
字面123
可以在編譯時被自動轉換爲Short
或Long
。但它不會被轉換爲Float
或Double
。
fun fooShort(x: Short) {}
fun fooInt(x: Int) {}
fun fooLong(x: Long) {}
fun main(args: Array<String>) {
fooShort(123) // OK
fooInt(123) // OK
fooLong(123) // OK
}
科特林想知道,如果你正在做的事情有意或無意。如果它允許隱式轉換,那麼我們永遠不會知道,編譯器也無法提供幫助。隱性轉換在統計上已被證明是大量的錯誤,神祕錯誤,邪惡的錯誤。 Kotlin不允許這樣做,因爲它希望開發者表達意圖,而不是猜測它。沒有計劃改變這一點。 –
在Java中,您不會將'int'賦值給'double',而是經歷一個擴展過程,然後進行賦值。您可以閱讀對可能發生的所有事情的簡單解釋:https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html –