Преобразование целого числа в длинное
мне нужно получить значение поля с помощью отражения. Бывает так, что я не всегда уверен, что тип данных поля. Для этого и во избежание дублирования кода я создал следующий метод:
@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 ответов:
нет, вы не можете разыграть
IntegertoLong, даже если вы можете конвертировать из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; }