gpt4 book ai didi

java - 是否可以更改为 Kotlin 数据类生成的 toString() 方法的行为?

转载 作者:行者123 更新时间:2023-12-02 10:17:49 28 4
gpt4 key购买 nike

例如:

data class Key(
val id: Int,
val secret: String,
val description: String?
)

要排除或屏蔽密码或信用卡号等特殊属性:

Key(
id = 1,
secret = "foo",
description = "bar"
).toString()
// Key(id=1, description=bar)
// or
// Key(id=1, secret=********, description=bar)

或者忽略带有 null 的属性以使结果字符串更具可读性:

Key(
id = ...,
secret = ...,
description = null
).toString()
// Key(id=...)
// or
// Key(id=..., secret=...)

每次实现 toString() 可能会非常乏味且容易出错,特别是当类中有太多属性时。

是否有任何(即将推出的)解决方案可以解决此问题(例如,Lombok for Java)?

最佳答案

我对 Andrii Vdovychenko 之前的回复进行了如下修改:

data class Key(val id: Int, val secret: String, val description: String?){
override fun toString() = kotlinToString(target = this, properties = arrayOf(prop(Key::id), prop(Key::description), prop(Key::secret)))
}

fun <T>prop(kp : KProperty1<T, Any?>) : KProperty1<Any, Any?> {
return kp as KProperty1<Any, Any?>
}

fun kotlinToString(target: Any, properties : Array<KProperty1<Any, Any?>>) : String {
return properties
.map { kp -> Pair(kp.name, kp.get(target)) }
.filter { p -> p.second != null }
.map { p -> "${p.first}: ${p.second}" }
.joinToString(", ")
}

您可以使用以下main函数测试mi的实现:

fun main(args : Array<String>) {
println(Key(1, "aa", "bbb").toString())
println(Key(1, "aa", null).toString())
}

哪个输出是

id: 1, description: bbb, secret: aa
id: 1, secret: aa

也许您可以更改 kotlinToString 实现,以便在输出字符串中包含每个类前缀,也许将其作为参数传递给 kotlinToString,但我希望这可以帮助你!

关于java - 是否可以更改为 Kotlin 数据类生成的 toString() 方法的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550811/

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