gpt4 book ai didi

kotlin - 将 `Pair`表示的新键值添加到 `MutableMap`

转载 作者:行者123 更新时间:2023-12-02 13:06:41 28 4
gpt4 key购买 nike

我目前有像dsl这样的类,并且具有构建能力

class GRLMessage {
var headerMap : MutableMap<String, String> = mutableMapOf()
lateinit var methodType : GRLMethod
lateinit var multipartObject : IGRLMultipart

fun message(closure: GRLMessage.() -> Unit) : GRLMessage {
closure()
return this
}

fun method(closure: GRLMessage.() -> GRLMethod) : GRLMessage {
methodType = closure()
return this
}

fun headers(closure: GRLMessage.() -> Unit) : GRLMessage {
closure()
return this
}

fun header(closure: GRLMessage.() -> Pair<String, String>) : GRLMessage {
var pair = closure()
headerMap.put(pair.first, pair.second)
return this
}

fun multipart(closure: GRLMessage.() -> IGRLMultipart) : GRLMessage {
multipartObject = closure()
return this
}
}

我这样测试
class GRLMessageTest {

data class DummyMultipart(val field: String) : IGRLMultipart {
override fun getContent() {
this
}
}

@Test fun grlMessageBuilderTest() {
val grlMessage = GRLMessage().message {
method { GRLMethod.POST }
headers {
header { Pair("contentType", "object") }
header { Pair("objectType", "DummyMultipart") }
}
multipart { DummyMultipart("dummy") }
}

val multipart = DummyMultipart("dummy")
val headers = mapOf(
Pair("contentType", "object"),
Pair("objectType", "DummyMultipart")
)
val method = GRLMethod.POST

assertEquals(multipart, grlMessage.multipartObject)
assertEquals(method, grlMessage.methodType)
assertEquals(headers, grlMessage.headerMap)
}
}

但是尽管提供
header { Pair("contentType", "object") }

我仍然需要评估 closure方法中的 header,并将 put的键和值直接输入到我的 MutableMap
fun header(closure: GRLMessage.() -> Pair<String, String>) : GRLMessage {
var pair = closure()
headerMap.put(pair.first, pair.second)
return this
}

有没有更好的方法将条目添加到 Map

最佳答案

您的headerMap是否需要为var?如果没有,您可以将其更改为val并使用headerMap += closure()

关于kotlin - 将 `Pair`表示的新键值添加到 `MutableMap`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39540722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com