En Java, nous pouvons affecter int
à double
, par exemple double x = 123
;kotlin - conversion automatique de types numériques
Dans kotlin, nous avons eu une erreur compilée.
Question: Pouvons-nous activer la fonctionnalité de conversion automatique dans kotlin
? Pourquoi kotlin
n'a pas cette fonctionnalité par défaut?
var x: Double = 123; // ERROR
Un autre exemple:
fun foo(x: Double) { }
fun main(args: Array<String>) {
foo(123.0); // OK
foo(123); // ERROR
}
MISE À JOUR:
le 123
littéral peut être converti automatiquement Short
ou Long
au moment de la compilation. Mais il ne sera pas converti en Float
ou 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
}
Si cela permet la conversion implicite, alors nous ne le saurons jamais et le compilateur ne peut pas aider. Les conversions implicites ont statistiquement montré un grand nombre de bugs, de bogues mystérieux, de bugs diaboliques. Kotlin ne le permet pas car il veut que le développeur énonce l'intention, pas la deviner. Il n'y a pas de plan pour changer cela. –
En Java, vous n'attribuez pas un 'int' à un' double', vous passez par un processus d'élargissement suivi d'une affectation. Vous pouvez lire l'explication non-simple de tout ce qui peut arriver: https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html –