【问题标题】:Is there a dictionary which accepts values of various data types?是否有接受各种数据类型值的字典?
【发布时间】:2011-05-24 13:51:26
【问题描述】:

我需要一个映射,其中值是不同类型的,如整数、字符串等。Java 的问题是这里的原语不是Objects,这表明它可能不可能有一个混合字典。我想确认一下。

【问题讨论】:

  • 您可能想分享更多关于 cmets 的设计。根据我的经验,在地图中使用不同类型的值通常表明设计不够优化。
  • 我想要一个可以创建树的 JSON 反序列化器,它仅基于消息而不是将其转换为给定的目标类。所以我想要一个字典(字典或映射任何名称)或 List 作为输出,如 Jon Skeet 所说的假设 Java 中的自动装箱。还假设有一个很好的 JSON 序列化反序列化库可以做到这一点。例如,Gson 需要将消息反序列化为的类型。因此 Gson 对我没有帮助。希望你能理解我的问题。
  • 你能发布你的字典/地图应该是什么样子以及你从中提取的 JSON 输出吗?

标签: java types dictionary map primitive-types


【解决方案1】:

您可以利用自动装箱并使用 Integer 而不是 int 等等。

相应的类型(IntegerDoubleBool、...)继承对象,因此您可以使用标准的 Map<Object, Whatever> 并向其扔任意东西。

【讨论】:

    【解决方案2】:

    听起来您只想要一个Map<String, Object>(或任何您的密钥类型)。

    原始值将被适当地装箱:

    Map<String, Object> map = new HashMap<String, Object>();
    
    map.put("int", 20);
    map.put("long", 100L);
    // etc
    

    请注意,为了检索值并将其拆箱,您必须提及特定的包装器类型:

    // Explicit unboxing
    int x = (int) (Integer) map.get("int");
    // Implicit unboxing
    int y = (Integer) map.get("int");
    // USing a method from Number instead
    int z = ((Integer) map.get("int")).intValue();
    

    【讨论】:

    • 天哪,乔恩,你真的不睡觉。我正要发布同样的东西。 :)
    • 数字的另一个选项是 Map
    • @Peter Lawrey,OP 也想要一个字符串类型的值。号码不符合条件。
    • @The Elite Gentleman,说得好,奇怪的是,非泛型的 Map 和 Dictionary 可以完成这项工作。
    • 谢谢乔恩,我需要这样的东西。请参阅上面的评论以了解我的问题。
    【解决方案3】:

    您可以使用Integer 代替int

    【讨论】:

      【解决方案4】:

      当您在 Java 中将原语放入 Map 时,它们会自动装箱 进入其对象形式。例如,如果您将Map 定义为:

      Map<Integer, String> myMap = new HashMap<Integer, String>();
      

      然后您可以使用int 类型的原语,因为它们将被自动装箱到Integer

      至于你原来的问题,这样定义Map

      // using Integer for key type, can be something else
      Map<Integer, Object> myMap = new HashMap<Integer, Object>();
      

      那么您应该能够将任何 Java 对象放入地图中。

      【讨论】:

      • 地图接口,所以new Map&lt;Integer, Object&gt;();是失败的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 2012-01-27
      • 2017-09-23
      • 2012-08-31
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多