2013-06-25 66 views
3

我需要將兩個值一起添加,並且它們都以Longs形式存儲在對象HashMap中。 這就是我想要做的,我的IDE說這是一個錯誤。在一條線上鑄造Java方法

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

我猜這不會工作,因爲currentRowContents是一個HashMap類型對象,還等什麼,從currentRowContents.get(...)返回將需要轉換類型 ,那麼我可以使用它的.longValue()方法。

我知道我可以通過將它分解成單獨的語句和做一些投射來解決問題。但是我想知道是否有一種方法可以讓上述內容在不拆分的情況下工作,並且如果它確實需要投射(我確信它可以)投射到哪裏?

編輯 這不是說它改變了什麼,但對於那些想知道更多的人來說,我收到的答案確實能解決問題。但我使用的哈希映射是對象,對象,雖然它更像字符串,對象,並且它包含數據庫中的數據。不幸的是,我無法改變哈希映射,因爲它來自一個我無法改變的特定框架框架。

+0

請提供所有信息,例如: IDE的錯誤消息 –

回答

8

看起來像您使用的是raw typeMap。鑑於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(); 
+0

您假設地圖中的所有值均爲長整型。這不一定是真的。 – Pablo

+0

@MarounMaroun如果'Map'來自他無法訪問的其他代碼呢? – NINCOMPOOP

+0

@TheNewIdiot然後,他將不得不施放:) – Maroun

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

能投的ObjectLong

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


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

我猜這不會工作,因爲currentRowContents是一個HashMap類型的對象,

如果pos錫布爾赫丁然後用正確類型Map如果Map所有值都Long,你可以訪問或授權的代碼聲明Map

Map<String, Long> currentRowContents; 
3

投:

((Long) obj).longValue(); 

我保持抽象,因爲這可以用任何Object完成,你會明白。執行內聯演員時,請確保使用雙重對比。當然,請確保你的Object確實是一個Long的值,以避免ClassCastException

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