it-swarm.com.ru

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

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

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

86
Tiago Veloso

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

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

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

76
Jon Skeet

Просто:

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

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

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

40
Rich MacDonald

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

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

Выиграть.

18
Anon

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

Long i = 1234L;
6
Jeff Johny

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

 new Long(your_integer);

Пример 2

Long.valueOf(your_integer); 

Пример 3 

Long a = 12345L;

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

Integer y = 12;
long x = y.longValue();
6
Naresh Kumar
((Number) intOrLongOrSomewhat).longValue()
4
cingulata

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

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

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

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

4
Sharad Holani
new Long(Integer.longValue());

или же 

new Long(Integer.toString());
1
Pavlo Zvarych

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

Integer intVal = 1;
Long longVal = (long) (int) intVal
1
Steven Spungin

Анализатор от переменных 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;
}
1
Bremsstrahlung

Это нуль-безопасно

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