在Kotlin中将变量用作命名参数

时间:2019-01-29 22:17:39

标签: kotlin named default-parameters

我有一个定义如下的函数:

getTypeB(id: String, 
         valA1: TypeA = defaultA1
         valA2: TypeA = defaultA2,
         valA3: TypeA = defaultA3 ) : TypeB {}

我知道使用命名参数,我只能使用某些val调用上述函数,例如

getTypeB(id,
         valA2 = someValueOfTypeA )

我的问题是,这里可以用任何方式使文字valA2成为变量。我希望能够从其他地方调用getTypeB,在这些地方除非传入参数,否则他们将不知道参数实参名称。那么有没有办法为命名实参使用变量?如果没有,我们还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

您可以使用map进行此操作:

fun getTypeB(id: String,
             varsMap: Map<String, TypeA>): TypeB {
    val valA1: TypeA = varsMap.getOrElse("valA1") { defaultA1 }
    val valA2: TypeA = varsMap.getOrElse("valA2") { defaultA2 }
    val valA3: TypeA = varsMap.getOrElse("valA3") { defaultA3 }
    //
}

val args = mapOf(
        "valA1" to someValueOfTypeA,
        "valA2" to someValueOfTypeA)
getTypeB(id, args)