【问题标题】:How to convert Object to "original" type如何将对象转换为“原始”类型
【发布时间】:2015-12-19 10:03:09
【问题描述】:

我有以下代码,其中我得到一个 HashMap<String,Object>,其中包含不同的数据类型作为值(例如 int、String、float)并希望将 Object 转换为其原始类型。

HashMap<String,Object> values = new HashMap<String,Object>;
values.put("Field1", 23);
values.put("Field2", "teststring");
values.put("Field3", 64.23f);

int a = (Integer)values.get("Field1");
String b = (String)values.get("Field2");
float c = (Float)values.get("Field3");

如您所见,我知道如何通过类型转换来做到这一点,但有没有办法动态地做到这一点?

我知道我可以使用 values.get("Field3").getClass(); 获得“原始”类型,但我不知道如何使用它来解决我的问题。

我在查询结果中有两个ints,我想知道它们的总和。因此我必须将Objects 转换为int,然后建立总和。下次我想做同样的事情,但类型不是ints,而是floats。

【问题讨论】:

  • 假设你可以做你想做的事......你可能会对结果做什么?您不可能将它存储在变量中(因为您不知道该变量将是什么类型)或对它做任何事情(因为您在编译时不知道它是什么类型)或用它调用方法(因为编译器不知道调用哪个方法,因为它不知道类型)。
  • @immibis HashMap 是数据库查询的结果。因此,为了使用此结果,我尝试将各个字段动态转换回它们的类型。
  • 动态地,这些对象已经属于该特定类型。
  • @maxkra 我仍然不确定我是否理解。如果可能的话,你能展示你的代码会是什么样子吗? (为它编一些语法)
  • @maxkra 你知道Field1int还是你需要检测它的类型?

标签: java object types casting


【解决方案1】:

请使用下面的 instanceof 运算符。 if(obj instanceof String){ cast to string } else if(obj instanceof Integer){ cast to int }

【讨论】:

    【解决方案2】:

    如果我正确理解了您的问题,您应该这样做:

    Object obj = values.get(fieldName);
    if(obj instanceof Float){
      float f = (float) obj;
      // do what you need with a float
    } else if(obj instanceof String){
      String s = (String) obj;
      // do what you need with a String
    } ...
    

    类型设置和优先级取决于您的任务。

    【讨论】:

    • 这是我正在寻找的正确方向。但是有没有办法让每个可能的类型都没有 if-then-else 部分?
    • 我认为没有。 Java 对类型足够严格,因此您应该手动处理它。多态性会自动解析类型,但您的情况根本与它无关
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多