Kotlin:类型推断失败:没有足够的信息来有趣地推断参数E <E> <init>():kotlin.collections.ArrayList <E>

时间:2019-12-06 11:01:55

标签: arrays kotlin arraylist

我这样声明了一个变量:

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

科特琳给我以下错误:

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>() }

科特琳说-删除显式类型参数

在这种情况下,科特林对如何采取行动持矛盾态度。

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

2 个答案:

答案 0 :(得分:0)

here所述,

  

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

所以您可以尝试这样使用

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

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

答案 1 :(得分:0)

  

科特琳说-删除显式类型参数

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

16

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