Kotlin是通过某些条件初始化两个或多个VAL的标准方法

Kotlin是通过某些条件初始化两个或多个VAL的标准方法,kotlin,Kotlin,按条件初始化两个或多个VAL的标准方法是什么 var a : Int;// I want this to be val, not var var b: Int;// I want this to be val, not var too if(condition) { a = 1 b = 2 } else { a = 3 b = 4 } 多次使用if不方便,因为可能会有很多变量和很多条件 val a = if(condition) 1 else 2 val b = if(conditi

按条件初始化两个或多个VAL的标准方法是什么

var a : Int;// I want this to be val, not var
var b: Int;// I want this to be val, not var too

if(condition) {
 a = 1
 b = 2
} else {
 a = 3
 b = 4
}
多次使用if不方便,因为可能会有很多变量和很多条件

val a = if(condition) 1 else 2
val b = if(condition) 3 else 4

您可以使用对分解来实现这一点:

val (a, b) = if (condition) 1 to 2 else 3 to 4
您可以在文档中阅读更多内容:

对于3个变量,可以使用三重变量:

您可以为此目的使用

val (a, b, c) = if (condition) listOf(1, 2, 3) else listOf(4, 5, 6)
对于不同的类型,可以将其与对象创建相结合:

data class ValueInitializer(
    val a: Int,
    val b: String
)

val (a: Int, b: String) = if (condition) 
         ValueInitializer(1, "String") 
    else 
         ValueInitializer(2, "String2")

另一点是,如果a和b是局部变量,那么在第一个示例中可以使用val而不是var。对于类字段,您可以在init块内初始化它们,或者用lateinit修饰符标记它们。

虽然使用元组和解构非常简洁,但您可以在问题代码中使用val而不是var

我试过了,对我来说,Kotlin 1.3.10的IDEA很好用

在Java中,每一个都被称为“空白终局”;我不知道科特林是否使用了相同的术语。在任何情况下,只要编译器能够看到这样一个变量总是像这里一样被初始化一次,它就很高兴了。

如果您在init块或构造函数中初始化,您可以使用val,它看起来非常干净,并且在以下情况下只使用一个:


否则,如果有许多变量,我建议从配置文件中读取初始化。本着代码和数据解耦的精神。

我正要以这种确切的方式发布,但后来我意识到,使用3+变量不会这么简单。不管怎样,对于2,这很好。@MarošŠeleng您可以对3个变量使用Triple。不确定是否为4+,但如果a、b、c是不同的类型呢?可以这样使用val a,b=如果条件列表为1,String1或列表为4,string2则a是Any,b是Any,而不是Int和String1,在第一种情况下是否不可能声明val?如果a和b不是字段,则可以使用val。如果将代码粘贴到空文件中,则会出现多个错误。如果它是在一个类中。必须为if定义构造函数或init块-statement@leonardkraemer如我所说,它对我有用。如果将问题代码粘贴到一个空文件中,它将不会编译,因为If需要在函数中,并且条件没有定义!但是如果你这样做了,例如,通过添加有趣的条件:Boolean{在开始处,在结束处},那么它对我来说编译得很好,要么使用val,要么使用var.@gidds,天哪,这是一个惊喜。我认为VAL应该始终使用定义进行初始化。
data class ValueInitializer(
    val a: Int,
    val b: String
)

val (a: Int, b: String) = if (condition) 
         ValueInitializer(1, "String") 
    else 
         ValueInitializer(2, "String2")
class foo(){
    val a : Int
    val b : Int

    init{
        if(condition) {
            a = 1
            b = 2
        } else {
            a = 3
            b = 4
        }
    }
}