Преобразование целого числа в длинное


мне нужно получить значение поля с помощью отражения. Бывает так, что я не всегда уверен, что тип данных поля. Для этого и во избежание дублирования кода я создал следующий метод:

@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.

13 81

13 ответов:

нет, вы не можете разыграть Integer to Long, даже если вы можете конвертировать из int до long. Для отдельные значение, которое, как известно, является числом, и вы хотите получить длинное значение, вы можете использовать:

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();

для массивов, это будет сложнее...

просто:

Integer i = 7;
Long l = new Long(i);
Integer i = 5; //example

Long l = Long.valueOf(i.longValue());

это позволяет избежать попадания производительности преобразования в строку. Элемент longValue() метод in Integer-это просто приведение значения int. Элемент Long.valueOf() метод дает виртуальной машине возможность использовать кэшированное значение.

Как ни странно, я обнаружил, что если парсить из строки это работает.

 int i = 0;
 Long l = Long.parseLong(String.valueOf(i));
 int back = Integer.parseInt(String.valueOf(l));

Win.

преобразуйте целое число непосредственно в long, добавив 'L' в конец целого числа.

Long i = 1234L;

преобразование целого числа в длинное очень просто и много способов преобразования этого
Пример 1

 new Long(your_integer);

Пример 2

Long.valueOf(your_integer); 

Пример 3

Long a = 12345L;

Пример 4
Если у вас уже есть int, введенный как целое число, вы можете сделать это:

Integer y = 12;
long x = y.longValue();
((Number) intOrLongOrSomewhat).longValue()

если целое число не равно null

Integer i;
Long long = Long.valueOf(i);

i будет автоматически типизирован в long.

используя valueOf вместо new позволяет кэшировать это значение (если оно мало) компилятором или JVM , что приводит к более быстрому коду.

Если вы знаете, что целое число не равно NULL, вы можете просто сделать это:

Integer intVal = 1;
Long longVal = (long) (int) intVal
new Long(Integer.longValue());

или

new Long(Integer.toString());

парсер от 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;
}

это null-safe

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();

в случае списка типа Long, добавляя L в конец каждого целого значения

List<Long> list = new ArrayList<Long>();
list  = Arrays.asList(1L, 2L, 3L, 4L);