Ich habe eine Hashtabelle namens table
. Der Typwert ist long
. Ich bekomme Werte mit .values()
. Nun möchte ich auf diese Werte zugreifen.
Collection val = table.values();
Iterator itr = val.iterator();
long a = (long)itr.next();
Aber wenn ich versuche, es zu bekommen, gibt es einen Fehler, da ich nicht vom Typ object
in long
konvertieren kann. Wie kann ich damit umgehen?
Versuche dies:
Long a = (Long)itr.next();
Sie erhalten ein Long-Objekt, aber mit Autoboxing können Sie es fast wie ein primitives Long-Objekt verwenden.
Eine andere Option ist die Verwendung von Generics:
Iterator<Long> itr = val.iterator();
Long a = itr.next();
Die Klasse Number
kann verwendet werden, um die Umwandlung von numerischen Datentypen zu überwinden.
In diesem Fall kann der folgende Code verwendet werden:
long a = ((Number)itr.next()).longValue();
Ich habe die folgenden Beispiele vorbereitet:Object
zu long
Beispiel - 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() );
Konsole Ausgabe wäre:
1416313200307
Object
zu double
Beispiel - 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");
Konsole Ausgabe wäre:
0.11
Object
zu double
Beispiel - 3
Seien Sie vorsichtig bei diesem einfachen Fehler ! Wenn ein Gleitkommawert mit der Funktion doubleValue()
konvertiert wird, stimmt der erste Wert möglicherweise nicht mit dem Endwert überein.
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");
Konsole Ausgabe wäre:
0.10999999940395355
Object
zu float
Beispiel - 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");
Konsole Ausgabe wäre:
0.11
Versuchen Sie: long a = ((Long) itr.next()).longValue();
Sie sollten die neuen generischen Funktionen von Java 5 verwenden.
Wenn Sie ein Element aus einer Sammlung entfernen, müssen Sie es in den Elementtyp umwandeln, der in der Sammlung gespeichert ist. Dies ist nicht nur unpraktisch, sondern auch unsicher . Der Compiler überprüft nicht, ob Ihre Umwandlung mit dem Typ der Sammlung identisch ist, sodass die Umwandlung zur Laufzeit fehlschlagen kann.
Mit Generics können Sie dem Compiler den Typ einer Auflistung mitteilen, damit diese überprüft werden kann. Sobald der Compiler den Elementtyp der Auflistung kennt, kann der Compiler überprüfen, ob Sie die Auflistung konsistent verwendet haben, und die richtigen Umsetzungen für Werte einfügen, die aus der Auflistung entnommen werden.
Sie können dieses kurze Howto oder dieses ausführlichere Tutorial lesen.
in meinem Fall habe ich eine Reihe von Objekten, die ich von einem Flex-Client bekomme.
manchmal können die Zahlen von Java als int und manchmal so lang interpretiert werden
um das Problem zu lösen, verwende ich die 'toString ()' Funktion wie folgt:
public Object run(Object... args) {
final long uid = Long.valueOf(args[0].toString());
Das gleiche Problem hatte ich aber während der JSP-Codierung. Die oben genannten Vorschläge zu Long und Generics funktionierten entweder nicht oder passten nicht in das Codefragment.
Ich musste es so lösen (in JSP):
<%Object y=itr.next(); %>
und danach verwenden Sie mein Object y wie <% = y%>, wie wir auch andere Java-Variablen im Scriptlet verwenden würden.
long value = Long.parseLong((String)request.getAttribute(""));