Java方法链接在单行上进行转换

时间:2013-06-25 10:04:42

标签: java

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

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

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

我知道我可以通过将它们全部拆分为单独的语句并进行一些转换来解决问题。但是我想知道是否有办法让上述工作没有拆分,如果它确实需要铸造(我确定它会这样做)放在哪里?

修改 并不是说它会改变任何东西,但对于那些想要了解更多的人来说,我收到的答案确实可以解决问题。但是我使用的哈希映射是 Object,Object ,但它更像 String,Object ,它确实包含来自数据库的数据。不幸的是,我无法更改哈希地图,因为它来自一个我无法改变的专门构建的框架。

5 个答案:

答案 0 :(得分:8)

您的Map似乎正在使用raw type。鉴于您的问题中使用的是longValue(),因此可以合理地假设Map的值属于Long

类型

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

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

如果Map的来源不在您的控制范围内,则必须进行投射

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

答案 1 :(得分:4)

可以将Object转换为Long

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


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

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

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

Map<String, Long> currentRowContents;

答案 2 :(得分:3)

您可以在调用方法之前添加强制转换,但最好指定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);
}

答案 3 :(得分:3)

在调用方法之前

施放:

((Long) obj).longValue();

我保持抽象,因为这可以用任何Object来完成,你就明白了。只需确保在执行内联强制转换时使用双重parathesis。当然,请确保您的Object确实是Long值,以避免ClassCastException

答案 4 :(得分:0)

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

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);