对于下面的代码,我可以将invoke
扩展名添加到Companion
operator fun MyValue.Companion.invoke(value: Int) =
MyValue(value.toString())
class MyValue(private val value: String) {
companion object
fun print() = println("value = $value")
}
这使我能够调用如下内容
MyValue(1).print()
但正如你所看到的,最初MyValue
不需要companion object
。
我想知道MyValue
是否没有companion object
,即
class MyValue(private val value: String) {
fun print() = println("value = $value")
}
是否可以为我仍然创建一个同伴扩展功能?例如
operator fun MyValue.Companion.invoke(value: Int) =
MyValue(value.toString())
你可以在你的类中添加一个接受Int的二级构造函数,
class MyValue(private val value: String) {
constructor(value: Int) : this(value.toString())
fun print() = println("value = $value")
}
现在可以同时调用MyValue("10").print()
和MyValue(10).print()