如何扩展Kotlin字符串插值以使用自定义类?

时间:2019-05-24 00:34:45

标签: android kotlin string-interpolation

根据我在文档中阅读的内容,据我了解,Kotlin中的字符串插值可以使以下代码起作用:

val n = 5 println("N is $n")

翻译为

StringBuilder().append("N is ").append(n).toString()

对于Stringbuilder.append()具有实现的类型来说,这是很好的选择。我现在想使用Kotlin扩展机制来附加我自己的类:

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参数为:A = 3,B = 5.0”

不幸的是,我的扩展名似乎被以下内容遮盖了:

public open fun append(obj: Any!): StringBuilder!

我没有设法在文档中找到解决此问题的方法...建议?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以通过覆盖Foo的toString来实现。

class Foo(val a: Int = 0, val b: Float = 0f) {

    override fun toString(): String {
        return "A = $a, B = $b"
    }

}