2014-01-14 48 views
0

我必須在我的代碼中的多個位置投擲原始雙長(Wrapper)。這兩種方式我可以工作與 -鑄造雙(原始)長(包裝)

linkcatch.setCode(Long.valueOf((long) relatedCd.getDouble(value))); 

(鑄造原始的雙本原長,然後封裝龍)

linkcatch.setCode(Long.valueOf(String.valueOf(relatedCd.getDouble(value)))); 

(鑄造雙到字符串在皮龍)

有任何方式從原生雙重投影到包裝很長時間沒有做中間投射。

我很擔心,因爲有很多地方我需要這樣做。謝謝。

+0

你使用本機,但我認爲你的意思是原始的?這不是原生的意思。 – Taylor

+0

只要做原始轉換。你認爲包裝類正在包裝什麼?原始的長。你無法擺脫這種轉換。 – kwatford

回答

1

只需投射和java自動裝箱將爲您轉換爲長對象類型。沒有必要做出特殊的庫或額外的方法(保持苗條!)

linkcatch.setCode((long)relatedCd.getDouble(value)); 

注:

  • 你可能要舍不只是投放。 (double to long conversion
  • 我看到你有一個'realtedCd'對象,這意味着你可能正在處理金錢或算術運算。如果是的話,我會建議使用的BigDecimal代替雙打的精密Double vs. BigDecimal?
1

而不是在每個java語句中進行轉換,您可以創建一個靜態方法,它將一個double值作爲參數,進行轉換並返回一個Long對象。通過這種方式,它很容易維護,代碼的可重用性沒有冗餘

0

你可以這樣做:

Long l = new Double(relatedCd.getDouble(value)).longValue(); 

Java的自動裝箱會幫你做其他事情。

1

找到一個更短的方式來做到這一點。您可以使用Math.Round獲取較長的本地值。之後,你可以簡單地把它投入很長時間

double a = -5.42 
Long = (Long)Math.round(a); 

然而,另一種方法也會做類似於讓另一個班級爲你做的工作。

public class Util{ 

    public static Long getLong(double a){ 
     return (Long)Math.round(a); 
    } 
} 

這樣,你的代碼會是這個樣子

linkcatch.setCode(Util.getLong(value)); 

代替

linkcatch.setCode(Long.valueOf((long) relatedCd.getDouble(value))); 

linkcatch.setCode(Long.valueOf(String.valueOf(relatedCd.getDouble(value)))); 

希望它可以幫助你讓你的代碼更乾淨,更容易管理。此外,如果您想讓所有Long值向上或向下舍入,則您只有一個地方可以編輯(Util類),而不是100個不同的地方。