java泛型数组替代方案_Kotlin泛型Array <T>导致“不能将T用作具体类型参数 . 使用类代替“但List <T>不会...

我有一个包含T和一些元数据的数组(或列表)的接口 .

interface DataWithMetadata {

val someMetadata: Int

fun getData(): Array

}

如果我编写最简单的接口实现,我会在 emptyArray() 上收到编译错误:"Cannot use T as a reified type parameter. Use a class instead."

class ArrayWithMetadata(override val someMetadata: Int): DataWithMetadata {

private var myData: Array = emptyArray()

override fun getData(): Array {

return myData

}

fun addData(moreData: Array) {

this.myData += moreData

}

}

但是,如果我将接口和实现都更改为列表,我没有编译时问题:

interface DataWithMetadata {

val someMetadata: Int

fun getData(): List

}

class ListWithMetadata(override val someMetadata: Int): DataWithMetadata {

private var myData: List = emptyList()

override fun getData(): List {

return myData

}

fun addData(moreData: Array) {

this.myData += moreData

}

}

我怀疑在我的问题中Kotlin泛型有一些有趣的教训 . 任何人都可以告诉我编译器在幕后做了什么以及为什么Array失败但List没有?是否有一种惯用的方法可以在此上下文中编译Array实现?

奖金问题:我达到Array over List的唯一原因是我经常看到Kotlin开发人员喜欢Arrays . 是这种情况,如果是这样,为什么?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值