【问题标题】:Java: Raw use of parameterized class 'ArrayList'Java:参数化类“ArrayList”的原始使用
【发布时间】:2021-10-20 10:56:10
【问题描述】:

我有一个混合了 Kotlin 和 Java 的 android 项目,我正在经历并将所有 Kotlin 转换为 Java,因为我们的团队了解 Java。我遇到的问题是“参数化类 'ArrayList' 的原始使用。我不知道我应该将哪个类传递给 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))
));

【问题讨论】:

  • 为什么你使用 Java 的 ArrayList 而使用 Kotlin 的 Map?
  • 每个元素代表公寓检查中的一个便利设施。我应该为此创建一个新的舒适等级吗?我有一个 TableAmenity,但它不使用相同的字段。
  • 您确实应该使用这些字段创建一个类,而不是使用地图。映射不保证类型安全,也不保证所有字段都有正确的值。
  • @m0skit0:我通过 Android Studio 将它从 Kotlin 转换过来,但效果并不理想。我们是一家 java 商店,kotlin 让一些程序员感到困惑,所以我正在经历并将其全部转换为 Java。工具 -> Kotlin -> 字节码 -> 反编译

标签: java android generics arraylist tuples


【解决方案1】:

听起来像 List&lt;Map&lt;String, Object&gt;&gt; - 该列表包含地图(您正在添加调用 hashMapOf 的结果。

那么,该映射似乎将字符串(例如ID)映射到一个奇怪的东西的抓包。这是一种代码异味,需要尽快进行重构 - 为什么没有类似的东西:

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

然后改用List&lt;WhateverThisMightBe&gt;?那是惯用的 java/kotlin。 List&lt;Map&lt;String, Object&gt;&gt; 正试图在 java 中以一种非常简陋的方式重新发明 javascript/PHP。不是个好主意。

【讨论】:

  • 这就是我想我要做的非常感谢你..
【解决方案2】:

似乎数组元素必须是HashMap&lt;String, Object&gt;。所以你使用ArrayList&lt;HashMap&lt;String, Object&gt;&gt; 甚至更好:List&lt;Map&lt;String, Object&gt;&gt;

但如果MapsKt.hashMapOf() 无法推断出最具体的类型 - 只需使用ArrayList&lt;Map&lt;?,?&gt;&gt; 即可。

【讨论】:

  • 或者更好:List&lt;Map&lt;String, Object&gt;&gt;.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2012-01-18
  • 2022-06-10
  • 1970-01-01
相关资源
最近更新 更多