在Kotlin中使用类型Comparable <T>的数组创建泛型类吗?

乌瓦洛斯

Kotlin中创建通用2D数组的启发,我有以下代码创建带有T类型数组的通用类。但是,一旦添加上限,就会出现编译错误。有没有办法做到这一点?

//This code compiles:
class GenericClass<T> protected constructor(size : Int, arrayFactory: (Int) -> Array<T>) {
  companion object {
    inline fun <reified T> invoke(size : Int)
       = GenericClass(size, { size -> arrayOfNulls<T>(size) })
  }
  val array = arrayFactory(size)
}

//Compile errors:
class GenericClass<T : Comparator<T>> protected constructor(size : Int, arrayFactory: (Int) -> Array<T>) {
  companion object {
    inline fun <reified T : Comparator<T>> invoke(size : Int)
       = GenericClass(size, { size -> arrayOfNulls<T>(size) })
  }
  val array = arrayFactory(max)
}

编译错误为:

  • 构造函数GenericClass>(size:Int,arrayFactory:(Int)-> Array)中与T绑定的类型参数不满足:推断类型T?不是Comparator的子类型
亲爱的太阳

错误消息虽然具有误导性,但确实暗示它与类型参数和参数的可空性约束有关。更改GenericClass构造函数以允许在null内部使用,Array如下所示:

class GenericClass<T : Comparator<T>> 
  protected constructor(size : Int, arrayFactory: (Int) -> Array<T?>) {
    companion object {
        inline fun <reified T : Comparator<T>> invoke(size : Int)
            = GenericClass(size, { size -> arrayOfNulls<T>(size) })
    }
    val array = arrayFactory(size)
}

arrayOfNulls顾名思义,它创建了sizenulls填充的给定数组因此,如果您希望使用它,则arrayFactory需要接受它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Kotlin中使用类型Comparable <T>的数组创建泛型类吗?

来自分类Dev

一个泛型类使用expression <T,bool>方法创建泛型扩展

来自分类Dev

将Comparable <T>与泛型类一起使用

来自分类Dev

类型T的数组(Java泛型)

来自分类Dev

Java泛型说明(使用Comparable时,将T约束为一个类型)

来自分类Dev

我可以在kotlin数据类中创建泛型类型吗?

来自分类Dev

使用泛型时,javac编译器会为每种类型创建不同的类吗?

来自分类Dev

使用泛型时,javac编译器会为每种类型创建不同的类吗?

来自分类Dev

在 Kotlin 中获取 T 的泛型类型

来自分类Dev

如何在类中使用Comparable作为泛型参数

来自分类Dev

泛型类的类型化数组

来自分类Dev

如何触发递归更改T类型的泛型类方法?

来自分类Dev

存储泛型 T 类型类的 C++ 向量

来自分类Dev

在泛型类中使用匿名类型

来自分类Dev

如何仅通过泛型类型 T 创建实例

来自分类Dev

Java创建泛型类型的数组

来自分类Dev

数组和泛型类扩展了另一个类:可以在打字稿中使用吗?

来自分类Dev

如何使用泛型创建AutoValue类?

来自分类Dev

如何使用泛型方法将List <T>转换为数组t [](对于基本类型)?

来自分类Dev

如何使用泛型方法将List <T>转换为数组t [](对于基本类型)?

来自分类Dev

在Swift类的泛型中使用协议数组

来自分类Dev

可以在引入其他泛型类型的泛型类上使用构造函数吗?

来自分类Dev

需要根据泛型类的类型创建不同的类

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

如何使用C#泛型将类的对象转换为T类型的对象?

来自分类Dev

如何使用已知类型作为参数创建具有泛型的泛型类?

来自分类Dev

如何在类中使用扩展的泛型类型的类型?

来自分类Dev

行类HanoiStack <T扩展Comparable <T >>扩展Stack <T>中的Java泛型编译错误

来自分类Dev

使用泛型类读取 Gson 中的匿名类数组

Related 相关文章

  1. 1

    在Kotlin中使用类型Comparable <T>的数组创建泛型类吗?

  2. 2

    一个泛型类使用expression <T,bool>方法创建泛型扩展

  3. 3

    将Comparable <T>与泛型类一起使用

  4. 4

    类型T的数组(Java泛型)

  5. 5

    Java泛型说明(使用Comparable时,将T约束为一个类型)

  6. 6

    我可以在kotlin数据类中创建泛型类型吗?

  7. 7

    使用泛型时,javac编译器会为每种类型创建不同的类吗?

  8. 8

    使用泛型时,javac编译器会为每种类型创建不同的类吗?

  9. 9

    在 Kotlin 中获取 T 的泛型类型

  10. 10

    如何在类中使用Comparable作为泛型参数

  11. 11

    泛型类的类型化数组

  12. 12

    如何触发递归更改T类型的泛型类方法?

  13. 13

    存储泛型 T 类型类的 C++ 向量

  14. 14

    在泛型类中使用匿名类型

  15. 15

    如何仅通过泛型类型 T 创建实例

  16. 16

    Java创建泛型类型的数组

  17. 17

    数组和泛型类扩展了另一个类:可以在打字稿中使用吗?

  18. 18

    如何使用泛型创建AutoValue类?

  19. 19

    如何使用泛型方法将List <T>转换为数组t [](对于基本类型)?

  20. 20

    如何使用泛型方法将List <T>转换为数组t [](对于基本类型)?

  21. 21

    在Swift类的泛型中使用协议数组

  22. 22

    可以在引入其他泛型类型的泛型类上使用构造函数吗?

  23. 23

    需要根据泛型类的类型创建不同的类

  24. 24

    如何使用C#泛型将类的对象转换为T类型的对象?

  25. 25

    如何使用C#泛型将类的对象转换为T类型的对象?

  26. 26

    如何使用已知类型作为参数创建具有泛型的泛型类?

  27. 27

    如何在类中使用扩展的泛型类型的类型?

  28. 28

    行类HanoiStack <T扩展Comparable <T >>扩展Stack <T>中的Java泛型编译错误

  29. 29

    使用泛型类读取 Gson 中的匿名类数组

热门标签

归档