【问题标题】:Kotlin: Type inference failed: Not enough information to infer parameter E in fun <E> <init>(): kotlin.collections.ArrayList<E>Kotlin:类型推断失败:没有足够的信息来推断 fun <E> <init>() 中的参数 E:kotlin.collections.ArrayList<E>
【发布时间】:2020-03-31 08:55:35
【问题描述】:

我声明了一个这样的变量:

var G: Array<MutableList<Int>> = Array(0) { ArrayList() }

Kotlin 给我以下错误:

Kotlin: Type inference failed: Not enough information to infer parameter E in fun <E> <init>(): kotlin.collections.ArrayList<E> /* = java.util.ArrayList<E> */
Please specify it explicitly.

这意味着 Kotlin 无法推断应为 Int 的 ArrayList 的类型。所以我为 ArrayList 添加了Int,如下所示:

var G: Array<MutableList<Int>> = Array(0) { ArrayList<Int>() }

Kotlin 说 - 删除显式类型参数

在这种情况下,Kotlin 对如何行动感到矛盾。

那么是否可以在不显式声明ArrayList类型的情况下编写代码?

【问题讨论】:

    标签: arrays kotlin arraylist


    【解决方案1】:

    正如here所讨论的,

    它目前的工作方式是,每当我们在 Kotlin 中遇到集合时,我们都会加载这个类的 Kotlin 版本(例如 kotlin.Collection)而不是 Java 版本(java.util.*)。使用 java.util.Collection 类型会导致 Kotlin 编译器发出警告,因为 Kotlin 的类型检查器旨在区分只读集合和可变集合。

    所以你可以尝试这样使用,

    var G = arrayOf<MutableList<Int>>()
    

    此外,here 是您需要了解的一些好东西。

    【讨论】:

      【解决方案2】:

      Kotlin 说 - 删除显式类型参数

      Kotlin 没有(您可以在 https://pl.kotl.in/7v1h5Yobu 中看到没有警告)。它可能是 IDEA 插件。如果您查看https://youtrack.jetbrains.com/issues/KT?q=Remove%20explicit%20types%20arguments,您会发现有不少误报。可能值得检查你的是否真的是其中之一,如果不是,则发布一个新问题。

      var G = Array<MutableList<Int>>(0) { ArrayList() }
      

      也应该在没有来自 IDEA 的警告的情况下工作。

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多