2010-02-28 46 views
15

我有一個名爲table的散列表。類型值是long。我正在使用.values()獲取值。現在我想要訪問這些值。無法從類型對象轉換爲長

Collection val = table.values(); 

Iterator itr = val.iterator(); 
long a = (long)itr.next(); 

但是,當我設法得到它,它給了我的錯誤,因爲我不能從object類型轉換爲long。我怎樣才能解決它?

+0

在Hashtable的類型也不能長久 - 你一定是指龍。 – 2010-02-28 14:34:01

回答

34

試試這個:

Long a = (Long)itr.next(); 

你有很長的對象結束,但與自動裝箱你可以使用它幾乎像一個原始的長。

另一種選擇是使用泛型:

Iterator<Long> itr = val.iterator(); 
    Long a = itr.next(); 
4

嘗試:long a = ((Long) itr.next()).longValue();

+0

這比需要更囉嗦 - 請參閱提到自動裝箱的其他答案。 – crazyscot 2010-02-28 13:51:44

+0

@crazyscot:從OP的代碼中,我認爲他使用的是比Java 5更早的Java版本。 – missingfaktor 2010-02-28 13:52:42

3

您應該使用泛型功能從Java 5

當你把一個元素出 集合,你必須把它投到 存儲在 集合中的元素的類型。 除了 不方便,這是不安全的。 編譯器不檢查您的演員 是否與該集合的類型 相同,因此演員在運行時可能會失敗。

泛型爲您提供了一種方法,讓您通過 將集合類型 傳遞給編譯器,以便可以對 進行檢查。一旦編譯器知道集合的元素類型, 編譯器可以檢查您是否始終如一地使用了 集合,並且 可以將正確的強制轉換插入集合中取出的值 。

您可以閱讀這個快速howto或這個更完整的tutorial

1
在我的情況

我有我從Flex客戶端獲取對象的數組,

有時號碼可以通過Java作爲int和有時長達解釋,

所以要解決這個問題,我使用 '的toString()' 函數如下:

public Object run(Object... args) { 

    final long uid = Long.valueOf(args[0].toString()); 
0
long value = Long.parseLong((String)request.getAttribute("")); 
0

我面臨同樣的問題,但同時做JSP編碼。上面提到的有關Long和泛型的建議要麼不起作用,要麼不適合代碼片段。

我不得不解決它像這樣(在JSP中):

<%Object y=itr.next(); %> 

,後來用我的對象Ÿ像<%= Y%>因爲我們會在小腳本使用任何其他Java變量。

6

Number類可用於克服數字數據類型轉換。

在這種情況下,下面的代碼可能會被使用:

long a = ((Number)itr.next()).longValue(); 



我準備下面的實施例:

Objectlong例如 - 1

// preparing the example variables 
Long l = new Long("1416313200307"); 
Object o = l; 

// Long casting from an object by using `Number` class 
System.out.print(((Number) o).longValue()); 

控制檯輸出將是:

1416313200307 



Objectdouble例子 - 2

// preparing the example variables 
double d = 0.11; 
Object o = d; 

// Double casting from an Object -that's a float number- by using `Number` class 
System.out.print(((Number) o).doubleValue() + "\n"); 

控制檯輸出將是:

0.11 



Objectdouble例子 - 3

注意此點簡單的錯誤!如果使用doubleValue()函數轉換浮點值,則第一個值可能不等於最終值。
如下所示0.11!= 0.10999999940395355

// preparing the example variables 
float f = 0.11f; 
Object o = f; 

// Double casting from an Object -that's a float number- by using `Number` class 
System.out.print(((Number) o).doubleValue() + "\n"); 

控制檯輸出將是:

0.10999999940395355 



Objectfloat例子 - 4

// preparing the example variables 
double f = 0.11; 
Object o = f; 

// Double casting from an Object -that's a float number- by using `Number` class 
System.out.print(((Number) o).floatValue() + "\n"); 

控制檯輸出是:

0.11 
相關問題