Преобразование целого числа в длинное
мне нужно получить значение поля с помощью отражения. Бывает так, что я не всегда уверен, что тип данных поля. Для этого и во избежание дублирования кода я создал следующий метод:
@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 ответов:
нет, вы не можете разыграть
Integer
toLong
, даже если вы можете конвертировать изint
доlong
. Для отдельные значение, которое, как известно, является числом, и вы хотите получить длинное значение, вы можете использовать:Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance); Long value1 = tmp.longValue();
для массивов, это будет сложнее...
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.
преобразование целого числа в длинное очень просто и много способов преобразования этого
Пример 1new Long(your_integer);
Пример 2
Long.valueOf(your_integer);
Пример 3
Long a = 12345L;
Пример 4
Если у вас уже есть int, введенный как целое число, вы можете сделать это:Integer y = 12; long x = y.longValue();
если целое число не равно null
Integer i; Long long = Long.valueOf(i);
i
будет автоматически типизирован вlong
.используя
valueOf
вместоnew
позволяет кэшировать это значение (если оно мало) компилятором или JVM , что приводит к более быстрому коду.
Если вы знаете, что целое число не равно NULL, вы можете просто сделать это:
Integer intVal = 1; Long longVal = (long) (int) intVal
парсер от
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; }