Преобразование целого числа в длинное - PullRequest
98 голосов
/ 14 июля 2011

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

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

118 голосов
/ 11 сентября 2013

Просто:

Integer i = 7;
Long l = new Long(i);
80 голосов
/ 14 июля 2011

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

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

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

47 голосов
/ 09 августа 2013
Integer i = 5; //example

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

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

18 голосов
/ 26 июля 2012

Как ни странно, я обнаружил, что если вы анализируете строку, она работает.

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

Win.

8 голосов
/ 17 апреля 2015

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

Long i = 1234L;
7 голосов
/ 28 апреля 2016

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

 new Long(your_integer);

Пример 2

Long.valueOf(your_integer); 

Пример 3

Long a = 12345L;

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

Integer y = 12;
long x = y.longValue();
5 голосов
/ 04 июля 2017

Если целое число не равно нулю

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

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

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

4 голосов
/ 02 августа 2016
((Number) intOrLongOrSomewhat).longValue()
2 голосов
/ 10 июня 2016

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

Integer intVal = 1;
Long longVal = (long) (int) intVal
1 голос
/ 29 марта 2017

Анализатор переменных 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...