Usando Java, puedo querer inicializar una variable final usando una declaración de cambio:
final String finalValue;
switch (condition) {
case 1:
finalValue = "One";
break;
case 2:
finalValue = "Two";
break;
case 3:
finalValue = "Three";
break;
default:
finalValue = "Undefined";
break;
}
En Kotlin, tratando de hacer lo mismo:
val finalValue: String
when (condition) {
1 -> finalValue = "One"
2 -> finalValue = "Two"
3 -> finalValue = "Three"
else -> finalValue = "Undefined"
}
Resultar en un error de compilación.
Una solución está utilizando la combinación by lazy
, pero esto crea una nueva instancia Lazy
.
val finalValue: String by lazy {
when (condition) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Undefined"
}
}
¿Hay una mejor manera de lograr esto?
3 respuestas
¿Qué tal esta construcción:
val finalValue: String = when (condition) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Undefined"
}
Usando when
como una expresión.
En realidad, lo siguiente se compila, no estoy seguro de qué problema encontraste.
fun x(condition: Int = 5) {
val finalValue: String
when (condition) {
1 -> finalValue = "One"
2 -> finalValue = "Two"
3 -> finalValue = "Three"
else -> finalValue = "Undefined"
}
}
La única posibilidad para mí: escribió la cláusula when
en un cuerpo de clase directamente, lo que ciertamente no funciona. Sin embargo, podría ponerlo en un bloque init
.
Pero, por supuesto, es mucho mejor usar simplemente el poder de la expresión when
aquí (que también sugiere el IDE):
val finalValue = when (condition) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Undefined"
}
También puede usar el bloque init para inicializar una variable final.
val finalValue: String
init {
finalValue = when (condition) {
1 -> "One"
2 -> "Two"
3 -> "Three"
else -> "Undefined"
}
}
Preguntas relacionadas
Nuevas preguntas
initialization
La inicialización se ocupa de la tarea de inicializar el contenido de su estructura de datos. Es una práctica común en lenguajes de tipo estático.