为什么Kotlin中无法为BigDecimal创建扩展属性和扩展函数?
问题根因
你的用法存在错误,和Kotlin 1.5.21版本无关:你当前定义的是BigDecimal的实例扩展,只能通过BigDecimal的实例对象调用,无法直接通过类名调用。
现有代码的正确调用方式
你写的扩展定义本身没有语法问题,只要导入java.math.BigDecimal.TEN,就可以通过实例调用:
val demoVal = BigDecimal.valueOf(2) // 调用实例扩展属性 println(demoVal.HUNDRED) // 调用实例扩展函数 println(demoVal.HUNDRED_ONE())
实现类名直接调用的写法
如果你需要实现BigDecimal.HUNDRED这种直接通过类名调用的效果,需要给BigDecimal的伴生对象定义扩展:
import java.math.BigDecimal import java.math.BigDecimal.Companion.ONE import java.math.BigDecimal.Companion.TEN // 伴生对象扩展属性 val BigDecimal.Companion.HUNDRED: BigDecimal get() = TEN.multiply(TEN) // 伴生对象扩展函数 fun BigDecimal.Companion.HUNDRED_ONE(): BigDecimal { return TEN.multiply(TEN).add(ONE) }
定义后即可直接通过类名调用:
println(BigDecimal.HUNDRED) println(BigDecimal.HUNDRED_ONE())
与之前列表工具函数的差异
你此前写的toList不属于扩展函数,只是普通的顶层工具函数,本身就支持全局直接调用,和本次的扩展写法不属于同一类实现逻辑。
内容的提问来源于stack exchange,提问作者Dmytro Chasovskyi
相关产品推荐
相关产品推荐

