Ich muss den Wert eines Feldes durch Reflexion ermitteln. Es kommt also vor, dass ich nicht immer sicher bin, welchen Datentyp das Feld hat. Zu diesem Zweck und um eine Vervielfältigung des Codes 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 folgt:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
oder
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Das Problem ist , dass ich nicht zu Guss scheinen kann Integer
zu Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Gibt es einen besseren Weg, um dies zu erreichen?
Ich benutze Java 1.6.
java
reflection
casting
Tiago Veloso
quelle
quelle
Number[]
und eine Schleife darüber verwenden, um ein entsprechend typisiertes Array zu erstellen, oder?double[]
zum Beispiel, aber würde für eine ArbeitDouble[]
.Number
. Oder anders ausgedrückt: die Konvertierungsregel glauben Sie nicht lassen Sie sich von einem zum anderen zu konvertieren?Einfach:
quelle
int
Werte.Integer
toint
und wandelt es dann um,long
bevor es an den jetzt veraltetenLong(long)
Konstruktor übergeben wird.Dies vermeidet den Leistungseinbruch beim Konvertieren in einen String. Die
longValue()
Methode in Integer ist nur eine Umwandlung des int-Werts. DieLong.valueOf()
Methode gibt dem VM die Möglichkeit, einen zwischengespeicherten Wert zu verwenden.quelle
Seltsamerweise habe ich festgestellt, dass es funktioniert, wenn Sie aus einer Zeichenfolge analysieren.
Sieg.
quelle
Konvertieren von Integer in Long Very Simple und viele Möglichkeiten zum Konvertieren dieses
Beispiels 1
Beispiel 2
Beispiel 3
Beispiel 4
Wenn Sie das int bereits als Ganzzahl eingegeben haben, können Sie dies tun:
quelle
Konvertieren Sie eine Ganzzahl direkt in Long, indem Sie am Ende von Integer 'L' hinzufügen.
quelle
Wenn die Ganzzahl nicht null ist
i
wird automatisch auf a typisiertlong
.Die Verwendung von
valueOf
anstelle vonnew
ermöglicht das Zwischenspeichern dieses Werts (falls er klein ist) durch den Compiler oder die JVM, was zu einem schnelleren Code führt.quelle
quelle
Wenn Sie wissen, dass die Ganzzahl nicht NULL ist, können Sie dies einfach tun:
quelle
oder
quelle
Ein Parser von
int
Variablen zumlong
Typ ist in derInteger
Klasse enthalten. Hier ist ein Beispiel:Sie können diese in-built - Funktion verwenden , um ein Verfahren zu schaffen , das Parsen von
int
zulong
:quelle
Dies ist nullsicher
quelle
Wenn Sie die genaue Klasse Ihrer Zahl nicht kennen ( Integer , Long , Double , was auch immer), können Sie in Number umwandeln und Ihren Long-Wert daraus erhalten:
quelle
Bei einer Liste vom Typ Long wird am Ende jedes Integer-Werts L hinzugefügt
quelle
Versuchen Sie, den Wert von Jackson zu konvertieren
quelle