Muszę uzyskać wartość pola za pomocą odbicia. Tak się składa, że nie zawsze jestem pewien, jaki jest typ danych pola. W tym celu i aby uniknąć powielania kodu, stworzyłem następującą metodę:
@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;
}
I użyj tej metody jak:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
lub
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Problem polega na tym, że nie mogę przesyłać Integer
do Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Czy jest lepszy sposób na osiągnięcie tego?
Używam Java 1.6.
java
reflection
casting
Tiago Veloso
źródło
źródło
Number[]
i pętli nad nią, aby utworzyć odpowiednio wpisaną tablicę, prawda?double[]
na przykład, ale będzie pracować dlaDouble[]
.Number
. Albo inaczej: która reguła konwersji, twoim zdaniem , pozwala ci nawracać się od jednej osoby do drugiej?Po prostu:
źródło
int
wartości.Integer
to,int
a następnie rzutuje nalong
przed przekazaniem doLong(long)
konstruktora, który jest przestarzały .Pozwala to uniknąć pogorszenia wydajności konwersji na ciąg.
longValue()
Metoda Integer jest tylko obsada wartości int.Long.valueOf()
Metoda daje VM możliwość korzystania z pamięci podręcznej wartość.źródło
Co dziwne, odkryłem, że jeśli przeanalizujesz ciąg znaków, to działa.
Zdobyć.
źródło
Zamiana liczb całkowitych na długie, bardzo proste i wiele sposobów konwersji tego
przykładu 1
Przykład 2
Przykład 3
Przykład 4
Jeśli masz już int wpisaną jako liczbę całkowitą, możesz to zrobić:
źródło
Zamień liczbę całkowitą bezpośrednio na długość, dodając „L” na końcu liczby całkowitej.
źródło
Jeśli liczba całkowita nie jest null
i
zostanie automatycznie rzutowany do plikulong
.Użycie
valueOf
zamiastnew
umożliwia buforowanie tej wartości (jeśli jest mała) przez kompilator lub maszynę JVM, co skutkuje szybszym kodem.źródło
źródło
Jeśli wiesz, że liczba całkowita nie jest równa NULL, możesz po prostu zrobić to:
źródło
lub
źródło
Klasa zawiera parser od
int
zmiennych dolong
typuInteger
. Oto przykład:Możesz łatwo użyć tej wbudowanej funkcji, aby utworzyć metodę, która analizuje od
int
dolong
:źródło
To jest bezpieczne
źródło
Jeśli nie znasz dokładnej klasy swojego numeru ( Integer , Long , Double , cokolwiek), możesz rzucić na Number i uzyskać z niego swoją wartość long:
źródło
W przypadku listy typu Long, dodanie L na końcu każdej wartości całkowitej
źródło
Spróbuj przeliczyć wartość według Jacksona
źródło