Мне нужно получить значение поля с помощью отражения. Так получилось, что я не всегда уверен, что это за тип данных поля. Для этого и во избежание некоторого дублирования кода я создал следующий метод:
@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;
}
И используйте этот метод, например:
Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
или
Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Проблема заключается в том, что я не могу показаться , чтобы бросить Integer
на Long
:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Есть ли лучший способ добиться этого?
Я использую Java 1.6.
java
reflection
casting
Тьяго Велозу
источник
источник
Number[]
и цикл над ним, чтобы создать правильно типизированный массив, верно?double[]
, например, но будет работать дляDouble[]
.Number
. Или, другими словами: какое правило преобразования, по вашему мнению , позволяет вам преобразовывать одно в другое?Просто:
источник
int
ценностей.Integer
to,int
а затем выполняет приведение к нему,long
прежде чем перейти к теперь устаревшемуLong(long)
конструктору.Это позволяет избежать снижения производительности при преобразовании в String.
longValue()
Метод Integer просто слепок значения Int. ЭтотLong.valueOf()
метод дает виртуальной машине возможность использовать кешированное значение.источник
Как ни странно, я обнаружил, что если вы разбираете строку, она работает.
Выиграть.
источник
Преобразование целого числа в длинное Очень простой и множество способов преобразования этого
примера 1
Пример 2
Пример 3
Пример 4
Если у вас уже есть тип int как целое число, вы можете сделать это:
источник
Преобразуйте целое число напрямую в длинное, добавив "L" в конец целого числа.
источник
Если целое число не равно нулю
i
будет автоматически преобразован в тип файлаlong
.Использование
valueOf
вместоnew
позволяет кэшировать это значение (если оно мало) компилятором или JVM, что приводит к ускорению кода.источник
источник
Если вы знаете, что целое число не равно NULL, вы можете просто сделать это:
источник
или
источник
В класс включен парсер от
int
переменных кlong
типуInteger
. Вот пример:Вы можете легко использовать эту встроенную функцию для создания метода, который анализирует от
int
доlong
:источник
Это нулевое значение
источник
Если вы не знаете точный класс своего числа ( Integer , Long , Double , что угодно), вы можете преобразовать его в Number и получить от него свое длинное значение:
источник
В случае списка типа Long, добавление L в конец каждого целочисленного значения
источник
Попробуйте convertValue от Джексона
источник