Kotlin 与 Java 兼容的神坑,Int 说:怪我咯

Kotlin 是一门完全面向对象的语言,连函数也都是对象,基本类型也是对象,所以类似 Java 那样不伦不类的类型系统,Kotlin 的类型表现起来有着高度的一致性。

这样是好的,不仅 Kotlin 这么做,很多语言都这么做。可是,Kotlin 号称 100% 兼容 Java 啊,谁让你这么号称的,只要出了问题就是 Kotlin 的锅!

话说我们社区的一位“萌新”(大佬,您也真是太萌了)提了个问题,说有这么个 Java 接口:

interface IntMap<V> extends java.util.Map<Integer, V> {
    V get(Integer key);
    V get(int key);
}

用 Kotlin 无法实现。

我一开始听说的时候,表示居然有此事!待洒家试了一试之后发现,还真得无法实现!

为啥?因为在 Kotlin 当中没有 int 这个的基本类型,Int 类型在编译时会根据情况自动选择映射于 Java 字节码的 Integer 还是 int,所以我们无需关心也无法决定 Int 最终编译成什么。

于是用 Kotlin 实现这个接口时,上述两个 get 方法签名就变得一致了:

class IntMapImpl: IntMap<String> {
    override fun get(key: Int?): String {
        ...
    }

    override fun get(key: Int): String {
        ...
    }
}

不得不说,这是一个忧伤的故事,这是第一个遇到的让我觉得无解的问题,因为 Kotlin 的编译器就真这么写了,真是无话可说。

如果你有兴趣加入我们,请直接关注公众号 Kotlin ,或者加 QQ 群:162452394 联系我们。

0?wx_fmt=jpeg


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值