如何将类型参数传递给泛型类构造函数引用?

约翰普

假设以下代码:

class ConstructMe<T> {}
data class Test<T> constructor(var supplier: () -> ConstructMe<T>) {}

fun main(args: Array<String>) {
    works<Int>()
    breaks<Int>()
}

fun <T> works() {
    Test<T>({ ConstructMe<T>() }) // (1) any one class type parameter can be removed like:
    Test({ ConstructMe<T>() })  // (2) still works (class type inferred by argument type)
    Test<T>({ ConstructMe() })  // (3) still works (argument type inferred by class type)
}

fun <T> breaks() {
    Test<T>(::ConstructMe) // type interference failed (should probably work like (3); compiler improvement possible?)
    Test<T>(::ConstructMe<T>) // type interference failed & type argument not allowed (language change necessary?)
}

我已经通过将JavaFX属性(SimpleIntegerProperty,,SimpleStringProperty...和SimpleObjectProperty<T>)传递给泛型类构造函数() -> Property<T>参数来实现这一点,在该参数中传递::SimpleIntegerProperty可以毫无问题地进行,而::SimpleObjectProperty失败如上述示例代码。

是否可以在此处改进编译器,或者允许将类型参数传递给构造函数/函数引用?在这里在简单的lambda表达式上使用构造函数引用甚至有意义吗?它的编译方式是否有所不同?

蛇人

是的,可以在此处改进编译器。它可以推断的类型参数ConstructMe参见问题https://youtrack.jetbrains.com/issue/KT-10711

对于非内嵌的ounter函数(在这种情况下,它是Test的构造函数),lambda和可调用的构造函数引用之间没有区别。对于这两种情况,编译器都会创建一个匿名类,该类具有invoke创建实例的方法ConstructMe

但是在构造函数有很多参数的情况下,可调用引用比lambda更方便。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将类型参数传递给泛型类构造函数引用?

来自分类Dev

如何将泛型类型对象传递给类构造函数

来自分类Dev

DryIoC根据泛型类型参数将参数传递给开放泛型服务的构造函数

来自分类Dev

如何将参数传递给静态类构造函数?

来自分类Dev

无法将匿名类型传递给泛型构造函数

来自分类Dev

如何将C#泛型类型传递给另一个类

来自分类Dev

如何将类型(泛型)传递给注释?

来自分类Dev

TypeScript:如何将类型明确传递给此函数的泛型

来自分类Dev

Java类-如何将泛型对象传递给函数

来自分类Dev

如何将主构造函数添加到具有类型约束的泛型类?

来自分类Dev

如何将字段构造函数参数传递给函数?

来自分类Dev

如何将构造函数参数传递给 ECMAScript 6 中的导入类?

来自分类Dev

如何将参数传递给 javafx 中 fxml 控制器类的构造函数?

来自分类Dev

如何将固定参数传递给基本构造函数

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

如何将URL传递给PHP类构造函数

来自分类Dev

如何将类传递给自己的构造函数?

来自分类Dev

将参数传递给类构造函数

来自分类Dev

如何将泛型传递给泛型方法?

来自分类Dev

如何将参数传递给类,以便在构造函数中传递参数时,JFrame会移动?

来自分类Dev

Java-通过构造函数将泛型列表传递给类

来自分类Dev

是否有必要将类型参数传递给泛型类中的静态函数?

来自分类Dev

如何将动态类型的参数传递给函数?

来自分类Dev

如何将lambda传递给需要类参数的函数

来自分类Dev

如何将类类型传递给kotlin中的函数?

来自分类Dev

如何创建匿名类,以便可以将其传递给泛型构造函数?

来自分类Dev

如何获得对具有指定类型的泛型类的构造函数的引用?

来自分类Dev

将泛型类型类传递给方法

Related 相关文章

  1. 1

    如何将类型参数传递给泛型类构造函数引用?

  2. 2

    如何将泛型类型对象传递给类构造函数

  3. 3

    DryIoC根据泛型类型参数将参数传递给开放泛型服务的构造函数

  4. 4

    如何将参数传递给静态类构造函数?

  5. 5

    无法将匿名类型传递给泛型构造函数

  6. 6

    如何将C#泛型类型传递给另一个类

  7. 7

    如何将类型(泛型)传递给注释?

  8. 8

    TypeScript:如何将类型明确传递给此函数的泛型

  9. 9

    Java类-如何将泛型对象传递给函数

  10. 10

    如何将主构造函数添加到具有类型约束的泛型类?

  11. 11

    如何将字段构造函数参数传递给函数?

  12. 12

    如何将构造函数参数传递给 ECMAScript 6 中的导入类?

  13. 13

    如何将参数传递给 javafx 中 fxml 控制器类的构造函数?

  14. 14

    如何将固定参数传递给基本构造函数

  15. 15

    将类型参数作为类型参数的类传递给Java中的泛型方法

  16. 16

    将类型参数作为类型参数的类传递给Java中的泛型方法

  17. 17

    如何将URL传递给PHP类构造函数

  18. 18

    如何将类传递给自己的构造函数?

  19. 19

    将参数传递给类构造函数

  20. 20

    如何将泛型传递给泛型方法?

  21. 21

    如何将参数传递给类,以便在构造函数中传递参数时,JFrame会移动?

  22. 22

    Java-通过构造函数将泛型列表传递给类

  23. 23

    是否有必要将类型参数传递给泛型类中的静态函数?

  24. 24

    如何将动态类型的参数传递给函数?

  25. 25

    如何将lambda传递给需要类参数的函数

  26. 26

    如何将类类型传递给kotlin中的函数?

  27. 27

    如何创建匿名类,以便可以将其传递给泛型构造函数?

  28. 28

    如何获得对具有指定类型的泛型类的构造函数的引用?

  29. 29

    将泛型类型类传递给方法

热门标签

归档