我这样声明了一个变量:
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类型的情况下编写代码吗?
答案 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警告的情况下工作。