wake-up-neo.com

Konvertierung vom Typobjekt in Long nicht möglich

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?

16
Mohit BAnsal

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

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
7
efkan

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

4
missingfaktor

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.

3
Desintegr

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());
1
ufk

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.

0
javabeginner
long value = Long.parseLong((String)request.getAttribute(""));
0
CodeShadow