Преобразование целочисленных в 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);