【问题标题】:Work with values through Hashmap object通过 Hashmap 对象处理值
【发布时间】:2023-04-06 11:08:01
【问题描述】:

我有一个 HashMap:

Map<String, Object> ObjectMap = new HashMap<String, Object>();

我给这张地图赋值:

this.ObjectMap.put("text",new ArrayList<Object>());

现在 map 存储一个带有“text”键的对象(ArrayList)。 现在我想给那个 ArrayList 赋值。我可以这样做:

@SuppressWarnings("unchecked")
List<Object> s= (List<Object>) ObjectMap.get("text"); s.add(new Ex("n"))

我可以用更好的方式绕过注释和参数吗?

【问题讨论】:

  • 当然可以,但是您需要设计一个更好的、类型安全的解决方案,而不是使用Map&lt;String,Object&gt;。例如,编写一个实际的类,其中一个名为text 的字段存储一个List&lt;Ex&gt;。提及Object 的代码本身就是一个警告信号。
  • “绕过参数”是什么意思?
  • 你打算在 Map 中存储什么样的对象作为值?如果它只是ListEx,您可以使用Map&lt;String, List&lt;Ex&gt;&gt; map。这将允许您像以前一样存储ArrayList&lt;Ex&gt;,但这次您将能够调用map.get("text").add(new Ex("n")) 而无需强制转换。
  • 要存储原始数据类型,未知但类型相同。
  • 你知道哪些原始数据类型吗?

标签: java object arraylist


【解决方案1】:

如果需要读取配置文件,可以在列表中使用 Stringified 值:

Map<String, List<String>> map = new HashMap<>();
map.put("key", new ArrayList<String>());
List<String> list = map.get("key");
list.add("config");

【讨论】:

    【解决方案2】:

    不要将值作为 Object 类型,不推荐它并导致混淆。

    Map < String, List < String >> ObjectMap = new HashMap < String, List < String >> ();
    this.ArrayObjectMap.put("text", new ArrayList < String > ());
    ObjectMap.get("text").add("n");
    

    【讨论】:

    • 我有对象,因为在对象后面我可以有任何数据类型。
    【解决方案3】:

    这里的问题是您将Object 用作集合类型。您正在压制的警告是为了让您知道这通常不是一个好主意,因为它会阻止 Java 的类型系统防止许多细微的错误。

    首先要问自己,你将哪些物品放入收藏中,取出后将如何使用。在大多数情况下,您会发现有一个interface,您可以定义所有成员都可以实现以显式声明进入集合的对象必须能够执行的操作。

    我的建议是查找该接口,然后将您的地图声明为Map&lt;String, MyInterface&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2020-09-20
      相关资源
      最近更新 更多