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

为何java.math.BigInteger可赋值给kotlin.Number却不能赋值给java.lang.Number

Kotlin BigInteger与Number类型赋值问题解答

为什么java.math.BigInteger可以赋值给kotlin.Number类型变量

Kotlin为了实现跨平台能力,在标准库中定义了独立的kotlin.Number抽象类,在JVM平台运行时,这个类型会被直接映射为Java的java.lang.Number。
java.math.BigInteger本身就是java.lang.Number的子类,Kotlin编译器做了专门的适配:所有Java中继承了java.lang.Number的类,在Kotlin类型体系里都会被自动识别为kotlin.Number的子类型,不需要显式写继承声明,所以val x: Number = BigInteger.ONE 是完全合法的赋值。

为什么val x: java.lang.Number = BigInteger.ONE会触发编译错误

在Kotlin的类型体系里,kotlin.Number和java.lang.Number是两个互相独立的类型声明,只有编译生成字节码的时候才会被擦成同一个类。
针对这种已经做了平台映射的Java基础类型,Kotlin编译器不会做双向的类型兼容处理:BigInteger在Kotlin里只会被识别为kotlin.Number的子类,和java.lang.Number没有继承关联,所以把它赋值给显式声明为java.lang.Number的变量,编译器就会报类型不匹配的错误。


内容的提问来源于stack exchange,提问作者k314159

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:15:07