it-swarm.com.de

Konvertierung von Ganzzahl in Long

Ich muss den Wert eines Feldes mithilfe von Reflektion ermitteln. Es kommt daher vor, dass ich nicht immer sicher bin, was der Datentyp des Feldes ist. Zu diesem Zweck und um einige Code-Duplizierungen zu vermeiden, habe ich die folgende Methode erstellt:

@SuppressWarnings("unchecked")
private static <T> T getValueByReflection(VarInfo var, Class<?> classUnderTest, Object runtimeInstance) throws Throwable {
  Field f = classUnderTest.getDeclaredField(processFieldName(var));
  f.setAccessible(true);
  T value = (T) f.get(runtimeInstance);

  return value;
}

Und verwenden Sie diese Methode wie: 

Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);

oder

Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);

Das Problem ist, dass ich Integer scheinbar nicht in Long umwandeln kann:

Java.lang.ClassCastException: Java.lang.Integer cannot be cast to Java.lang.Long

Gibt es einen besseren Weg, um dies zu erreichen?

Ich verwende Java 1.6.

86
Tiago Veloso

Nein, Sie können Integer nicht in Long umwandeln, obwohl Sie von int in long konvertieren können. Für einen individuellen Wert, der bekanntermaßen eine Zahl ist und Sie den langen Wert erhalten möchten, können Sie Folgendes verwenden:

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();

Bei Arrays wird es schwieriger sein ...

76
Jon Skeet

Einfach:

Integer i = 7;
Long l = new Long(i);
110
vahid kh
Integer i = 5; //example

Long l = Long.valueOf(i.longValue());

Dadurch wird der Performance-Nachteil der Konvertierung in einen String vermieden. Die longValue()-Methode in Integer ist nur eine Umwandlung des int-Werts. Die Long.valueOf()-Methode gibt dem vm die Möglichkeit, einen zwischengespeicherten Wert zu verwenden.

40
Rich MacDonald

Seltsamerweise fand ich heraus, dass es funktioniert, wenn Sie von einer Zeichenfolge aus analysieren.

 int i = 0;
 Long l = Long.parseLong(String.valueOf(i));
 int back = Integer.parseInt(String.valueOf(l));

Sieg.

18
Anon

Wandeln Sie eine Ganzzahl direkt in eine Long um, indem Sie am Ende der Ganzzahl 'L' hinzufügen.

Long i = 1234L;
6
Jeff Johny

Ganzzahl in Long konvertieren Sehr einfach und viele Möglichkeiten, dies zu konvertieren
Beispiel 1

 new Long(your_integer);

Beispiel 2

Long.valueOf(your_integer); 

Beispiel 3 

Long a = 12345L;

Beispiel 4
Wenn Sie den int bereits als Integer eingegeben haben, können Sie Folgendes tun 

Integer y = 12;
long x = y.longValue();
6
Naresh Kumar
((Number) intOrLongOrSomewhat).longValue()
4
cingulata

Wenn die Ganzzahl nicht Null ist 

Integer i;
Long long = Long.valueOf(i);

i wird automatisch in eine long umgewandelt.

Die Verwendung von valueOf anstelle von new ermöglicht das Zwischenspeichern dieses Werts (wenn er klein ist) durch den Compiler oder die JVM, was zu schnellerem Code führt.

4
Sharad Holani
new Long(Integer.longValue());

oder 

new Long(Integer.toString());
1
Pavlo Zvarych

Wenn Sie wissen, dass die Ganzzahl nicht NULL ist, können Sie dies einfach tun:

Integer intVal = 1;
Long longVal = (long) (int) intVal
1
Steven Spungin

Ein Parser von int-Variablen zum long-Typ ist in der Integer-Klasse enthalten. Hier ist ein Beispiel: 

int n=10;
long n_long=Integer.toUnsignedLong(n);

Sie können diese integrierte Funktion problemlos verwenden, um eine Methode zu erstellen, die von int bis long analysiert:

    public static long toLong(int i){
    long l;
    if (i<0){
        l=-Integer.toUnsignedLong(Math.abs(i));
    }
    else{
        l=Integer.toUnsignedLong(i);
    }
    return l;
}
1
Bremsstrahlung

Dies ist nullsicher

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();
0
adkisson