You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:45:03