首页 > 解决方案 > 是否有“严格”模式来禁用 Kotlin 中的自动“toString()”调用?

问题描述

我正在将一些非常字符串类型的 Java API 移植到 Kotlin 中。很多字符串有不同的含义,我正在创建更有意义的类型。我以前在 Java 中做过,而且我已经非常讨厌类型的自动“toString”。这么简单的例子:

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 来消除这些情况。这太野蛮了,对我来说,编译时错误比运行时错误要好得多。

对我来说,强类型的美妙之处在于在运行之前了解这些问题。

所以:有谁知道编译器标志/分析器/linter/IDE/咒语在编译时找到这些?

标签: stringkotlintostring

解决方案


没有办法将其关闭,您必须重写toString()才能执行您想要的操作:

class Protocol(val definition:String) {
    override fun toString() = definition
}

推荐阅读