2010-02-28 14 views
15

Ich habe eine Hashtabelle namens table. Der Typ Wert ist long. Ich bekomme Werte mit .values(). Jetzt möchte ich auf diese Werte zugreifen.Kann nicht vom Typ Objekt in lange konvertieren

Collection val = table.values(); 

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

Aber wenn ich versuche, es zu bekommen, es gibt mir eine Fehlermeldung, weil ich nicht vom Typ object-long umwandeln kann. Wie kann ich es umgehen?

+0

der Typ in der Hashtable kann nicht mehr lange dauern - Sie lange bedeuten muss. –

Antwort

34

Versuchen Sie folgendes:

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

Sie mit einem langen Gegenstand am Ende aber mit Autoboxing kann man es fast wie ein primitiven lang verwenden.

Eine weitere Option ist Generics zu verwenden:

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

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

+0

Das ist langatmiger als es sein muss - siehe die andere Antwort, die sich auf Autoboxing bezieht. – crazyscot

+0

@crazyscot: Aus OPs Code gehe ich davon aus, dass er eine ältere Version von Java als Java 5 verwendet. – missingfaktor

3

sollten Sie verwenden die neuenGenerics Features von Java 5.

Wenn Sie eine nehmen Element aus einer Sammlung, müssen Sie es in diewerfenArt des Elements, das in der Sammlung gespeichert ist. Neben unbequem, ist dies unsicher. Der Compiler überprüft nicht, ob Ihre Besetzung mit dem Typ der Sammlung übereinstimmt, sodass die Umwandlung zur Laufzeit fehlschlagen kann.

Generics bietet eine Möglichkeit für Sie zu kommunizieren, den Typ einer Sammlung an den Compiler, so dass es geprüft werden kann. Sobald der Compiler den Elementtyp der Sammlung kennt, kann der Compiler prüfen, ob Sie konsistent verwendet haben und die korrekten Umwandlungen der Werte einfügen, die aus der Sammlung genommen werden.

Sie können dieses schnelle howto oder dieses vollständigere tutorial lesen.

1

in meinem Fall habe ich eine Reihe von Gegenständen, die ich von einem Flex-Client bekommen,

manchmal können die Zahlen von Java als int und manchmal so lange interpretiert werden,

so das Problem zu beheben i verwenden Sie die 'toString()' Funktion wie folgt:

public Object run(Object... args) { 

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

ich das gleiche Problem konfrontiert, aber während Sie JSP-Codierung. Die oben genannten Vorschläge zu Long und Generika funktionierten entweder nicht oder passten nicht in das Codefragment.

hatte ich es so zu lösen (in JSP):

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

und danach mein Objekt y wie <% = y%> verwenden, wie wir anderes Java-Variable in scriptlet verwenden würden.

6

Number Klasse kann verwendet werden, um numerische Datentypen zu überwinden.

In diesem Fall wird der folgende Code verwendet werden könnten:

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



Ich habe die Beispiele bereit unter:

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

Console Ausgang wäre:

1416313200307 



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

Console Ausgang wäre:

0.11 



ObjectzudoubleBeispiel - 3

Seien Sie vorsichtig über diesen einfachen Fehler! Wenn ein Gleitkommawert mithilfe der Funktion doubleValue() konvertiert wird, ist der erste Wert möglicherweise nicht gleich dem endgültigen Wert.
Wie unten gezeigt 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"); 

Console Ausgang wäre:

0.10999999940395355 



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

Console Ausgang wäre:

0.11 
Verwandte Themen