有没有一种 "严格 "的模式来禁用Kotlin中的自动 "toString() "调用?

问题描述 投票:0回答:1

我正在将一些非常字符串化的Java API移植到Kotlin中。很多字符串都有不同的含义,我正在创建更有意义的类型。我以前在Java中也做过这样的工作,我非常讨厌类型的自动 "toString"-ing。

fun someMethod(protocol: String, host: String) {
    val connectionString = "$protocol:$host"
}

协议和主机可以用字符串来表示, 但它们在本质上是不同的, 所以我引入了特定的类型:

class Protocol(val definition:String)
class Host(val definition:String)

所以我引入了特定的类型: 然后替换参数定义。

fun someMethod(protocol: Protocol, host: Host) {
    val connectionString = "$protocol:$host"
}

现在connectionString代码仍然假设这是两个可以连接的字符串.编译器没有抱怨,因为它只是简单地调用toString()在这些类型上,这将总是导致某种字符串,但它很可能是像[Host@458ad742]这样的东西。

但我真的很希望这里有某种类型的错误或警告。在过去,我一直求助于从toString中抛出RuntimeExceptions来排除这些情况。这是很野蛮的,对我来说,编译时错误比运行时错误要好得多。

对我来说,强类型的好处就是在运行前知道这些问题。

所以。有谁知道有什么编译器标志分析器和集成开发环境的咒语 可以在编译时发现这些问题?

string kotlin tostring
1个回答
1
投票

没有办法关闭这个功能,你必须覆盖掉 toString() 做你想做的事。

class Protocol(val definition:String) {
    override fun toString() = definition
}
© www.soinside.com 2019 - 2024. All rights reserved.