3

我需要将两个值相加,它们都作为 Longs 存储在对象 HashMap 中。这就是我想要做的,我的 IDE 说这是一个错误。

long total = currentRowContents.get("value_A").longValue() + currentRowContents.get("value_B").longValue(); 

我猜这不会起作用,因为 currentRowContents 是一个 HashMap 类型Object,所以从currentRowContents.get(...)返回的内容需要转换为Long类型,然后我可以使用.longValue()方法就可以了.

我知道我可以通过将其全部拆分为单独的语句并进行一些转换来解决问题。但是我想知道是否有一种方法可以在不拆分的情况下使上述内容正常工作,以及是否确实需要强制转换(我确定确实如此)将其放在哪里?

编辑 并不是说它会改变任何东西,但对于那些想了解更多的人来说,我收到的答案确实解决了问题。但是我使用的 Hash Map 是Object, Object类型,尽管它更像是String, Object,并且它确实包含来自数据库的数据。不幸的是,我无法更改哈希映射,因为它来自一个我无法更改的专用框架。

4

5 回答 5

8

看起来你正在你的Map. 鉴于您的问题中使用longValue()了它,因此可以合理地假设MapLong

泛型可用于消除铸造的需要

Map<String, Long> currentRowContents = new HashMap<String, Long>();

如果 的来源Map不在您的控制范围内,则需要进行强制转换

long total = ((Long)currentRowContents.get("value_A")).longValue() + 
                  ((Long)currentRowContents.get("value_B")).longValue(); 
于 2013-06-25T10:07:53.813 回答
4

可以投射ObjectLong

((Long)currentRowContents.get("value_A")).longValue();


long total = ((Long)currentRowContents.get("value_A")).longValue() + 
             ((Long)currentRowContents.get("value_B")).longValue(); 

我猜这行不通,因为 currentRowContents 是一个 HashMap 类型的对象,

如果可能,则使用正确的类型作为Mapif 中的所有值,Map并且Long您有权访问或授权声明以下代码的代码Map

Map<String, Long> currentRowContents;
于 2013-06-25T10:07:12.347 回答
3

在调用方法之前强制转换:

((Long) obj).longValue();

我保持抽象,因为这可以用 any 来完成Object,你明白了。只需确保在执行内联转换时使用双括号即可。当然,请确保您Object确实是一个Long值得避免的值ClassCastException

于 2013-06-25T10:08:02.403 回答
3

您可以在调用方法之前添加强制转换,但最好指定 that 的泛型类型Map

long total = ((Long)currentRowContents.get("value_A")).longValue() 
  + ((Long)currentRowContents.get("value_B")).longValue();

例如:

public static void main(String[] args) {
    //Working Subpar
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("value1", new Long(10));
    map.put("value2", new Long(10));

    long total = ((Long)map.get("value1")).longValue() +
        ((Long)map.get("value2")).longValue(); 
    System.out.println(total);

    //Optimal Approach
    Map<String,Long> map2 = new HashMap<String,Long>();
    map2.put("value1", new Long(10));
    map2.put("value2", new Long(10));

    Long total2 = map2.get("value1")+ map2.get("value2"); 
    System.out.println(total);
}
于 2013-06-25T10:07:08.807 回答
0

这里我使用对象,首先将其转换为字符串,然后将其解析为长字符串。

HashMap<String, Object> a= new HashMap<String, Object>();
    a.put("1", 700);
     a.put("2", 900);
     long l=Long.parseLong(a.get("1").toString())+Long.parseLong(a.get("2").toString());
    System.out.println(l);
于 2013-06-25T10:12:43.470 回答