未在类中定义companion object时,能否添加Companion扩展函数?
问题解答
不能。当Kotlin类**没有显式定义companion object**时,MyValue.Companion这个类型根本不存在,编译器无法识别该类型,因此无法为它编写扩展函数。
Kotlin中,只有类内部声明了companion object后,编译器才会自动生成一个名为Companion的嵌套类(作为该类的伴生对象类型),此时你才能针对这个Companion类型编写扩展函数。如果没有定义伴生对象,就不存在这个类型,自然无法创建对应的扩展。
替代方案:实现类似调用效果
如果你想达到MyValue(1).print()这种简洁的调用方式,不需要依赖伴生对象,可以通过顶层同名函数实现:
// 定义顶层同名函数 fun MyValue(value: Int): MyValue { return MyValue(value.toString()) } class MyValue(private val value: String) { fun print() = println("value = $value") }
调用方式和你之前的需求完全一致:
MyValue(1).print() // 输出:value = 1
这种方式不需要类内部定义任何伴生对象,同样可以实现通过类名直接调用的构造逻辑。
内容的提问来源于stack exchange,提问作者Elye
相关产品推荐
相关产品推荐

