Java: 原始使用参数化 class 'ArrayList'

Java: Raw use of parameterized class 'ArrayList'

我接手了一个 android 项目,它混合了 Kotlin 和 Java,我正在研究并将所有 Kotlin 转换为 Java,因为我们的团队知道Java。我 运行 遇到的问题是“参数化 class 'ArrayList' 的原始使用。我无法弄清楚 class 我应该传递给 ArrayList 消除警告。

这是我的代码:

ArrayList amenities = new ArrayList<>();

amenities.add(MapsKt.hashMapOf(
   TuplesKt.to("ID", q.amenityID),
   TuplesKt.to("bExists", q.getAnswer().equals("1")),
   TuplesKt.to("Notes", Utils.CleanStringForUpload(q.amenityNotes))
));

看来数组元素必须是HashMap<String, Object>。所以你使用 ArrayList<HashMap<String, Object>> 甚至更好:List<Map<String, Object>>.

但是如果 MapsKt.hashMapOf() 无法推断出最具体的类型 - 只需使用 ArrayList<Map<?,?>> 并完成它。

听起来像 List<Map<String, Object>> - 该列表包含地图(您正在添加调用 hashMapOf.

的结果

然后,该映射似乎将字符串(例如 ID)映射到一堆奇怪的东西。这是一种代码味道,需要尽快而不是稍后进行重构 - 为什么你没有类似的东西:

class WhateverThisMightBe {
    String id;
    boolean exists;
    String notesHtml;
}

然后用 List<WhateverThisMightBe> 代替?那是惯用的 java/kotlin。 List<Map<String, Object>> 正试图以一种非常粗糙的方式在 java 中重塑 javascript/PHP。不是个好主意。