Преобразование целочисленных в Long
Мне нужно получить значение поля, используя отражение. Так получилось, что я не всегда уверен, что такое тип данных поля. Для этого, и чтобы избежать дублирования кода, я создал следующий метод:
@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.
Ответы
Ответ 1
Нет, вы не можете отбрасывать Integer
до Long
, даже если вы можете конвертировать из int
в Long
. Для индивидуального значения, которое, как известно, является числом, и вы хотите получить длинное значение, вы можете использовать:
Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();
Для массивов это будет сложнее...
Ответ 2
Просто:
Integer i = 7;
Long l = new Long(i);
Ответ 3
Integer i = 5; //example
Long l = Long.valueOf(i.longValue());
Это позволяет избежать повышения производительности при преобразовании в строку. Метод longValue()
в Integer является просто литой значения int. Метод Long.valueOf()
дает vm возможность использовать кешированное значение.
Ответ 4
Как ни странно, я обнаружил, что если вы разбираете строку, она работает.
int i = 0;
Long l = Long.parseLong(String.valueOf(i));
int back = Integer.parseInt(String.valueOf(l));
Win.
Ответ 5
Преобразуйте целое число непосредственно в long, добавив 'L' в конец Integer.
Long i = 1234L;
Ответ 6
Преобразование целого в Long Very Simple и многие способы преобразования этого
Пример 1
new Long(your_integer);
Пример 2
Long.valueOf(your_integer);
Пример 3
Long a = 12345L;
Пример 4
Если у вас уже есть int, введенный как Integer, вы можете сделать это:
Integer y = 12;
long x = y.longValue();
Ответ 7
((Number) intOrLongOrSomewhat).longValue()
Ответ 8
Если целое число не равно нулю
Integer i;
Long long = Long.valueOf(i);
i
буду автоматически Typecast на long
.
Использование valueOf
вместо new
позволяет кэшировать это значение (если оно небольшое) компилятором или JVM, что приводит к более быстрому коду.
Ответ 9
Если вы знаете, что Integer не является NULL, вы можете просто сделать это:
Integer intVal = 1;
Long longVal = (long) (int) intVal
Ответ 10
new Long(Integer.longValue());
или
new Long(Integer.toString());
Ответ 11
Парсер из переменных int
в тип long
включен в класс Integer
. Вот пример:
int n=10;
long n_long=Integer.toUnsignedLong(n);
Вы можете легко использовать эту встроенную функцию для создания метода, который анализирует от int
до long
:
public static long toLong(int i){
long l;
if (i<0){
l=-Integer.toUnsignedLong(Math.abs(i));
}
else{
l=Integer.toUnsignedLong(i);
}
return l;
}
Ответ 12
Это нуль-безопасно
Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();
Ответ 13
В случае списка типа Long добавление L в конец каждого целочисленного значения
List<Long> list = new ArrayList<Long>();
list = Arrays.asList(1L, 2L, 3L, 4L);