如何扩展 Kotlin 字符串插值以使用自定义 class?
How do I extend Kotlin string-interpolation to work with a custom class?
根据我在文档中阅读的内容,我的理解是 Kotlin 中的字符串插值是这样工作的:
val n = 5
println("N is $n")
转换为
StringBuilder().append("N is ").append(n).toString()
对于 Stringbuilder.append() 具有实现的类型来说,这非常好。我现在想使用 Kotlin 扩展机制来附加我自己的 class:
class Foo(a: Int = 0, b: Float = 0f) {}
fun Stringbuilder.append(aFoo: Foo) : Stringbuilder! {
return this.append("A = $a, B = $b")
}
所以当我打电话时:
aFoo = Foo(3,5.0f)
println("aFoo parameters are: $aFoo")
它打印:"aFoo parameters are: A = 3, B = 5.0"
不幸的是,我的扩展似乎被隐藏了:
public open fun append(obj: Any!): StringBuilder!
我没能在文档中找到解决这个问题的方法...有什么建议吗?
谢谢!
您可以通过覆盖 Foo 的 toString 来实现。
class Foo(val a: Int = 0, val b: Float = 0f) {
override fun toString(): String {
return "A = $a, B = $b"
}
}
根据我在文档中阅读的内容,我的理解是 Kotlin 中的字符串插值是这样工作的:
val n = 5
println("N is $n")
转换为
StringBuilder().append("N is ").append(n).toString()
对于 Stringbuilder.append() 具有实现的类型来说,这非常好。我现在想使用 Kotlin 扩展机制来附加我自己的 class:
class Foo(a: Int = 0, b: Float = 0f) {}
fun Stringbuilder.append(aFoo: Foo) : Stringbuilder! {
return this.append("A = $a, B = $b")
}
所以当我打电话时:
aFoo = Foo(3,5.0f)
println("aFoo parameters are: $aFoo")
它打印:"aFoo parameters are: A = 3, B = 5.0"
不幸的是,我的扩展似乎被隐藏了:
public open fun append(obj: Any!): StringBuilder!
我没能在文档中找到解决这个问题的方法...有什么建议吗?
谢谢!
您可以通过覆盖 Foo 的 toString 来实现。
class Foo(val a: Int = 0, val b: Float = 0f) {
override fun toString(): String {
return "A = $a, B = $b"
}
}