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.
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 ...
Einfach:
Integer i = 7;
Long l = new Long(i);
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.
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.
Wandeln Sie eine Ganzzahl direkt in eine Long um, indem Sie am Ende der Ganzzahl 'L' hinzufügen.
Long i = 1234L;
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();
((Number) intOrLongOrSomewhat).longValue()
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.
new Long(Integer.longValue());
oder
new Long(Integer.toString());
Wenn Sie wissen, dass die Ganzzahl nicht NULL ist, können Sie dies einfach tun:
Integer intVal = 1;
Long longVal = (long) (int) intVal
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;
}
Dies ist nullsicher
Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();