将整数转换为长整型

我需要使用reflection来获得一个字段的值。 恰巧我并不总是确定该字段的数据types是什么。 为此,为了避免一些代码重复,我创build了以下方法:

@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); 

问题是,我似乎无法将IntegerLong

 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long 

有没有更好的方法来实现这一目标?

我正在使用Java 1.6。

不,你不能将Integer转换为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()); 

这避免了转换为string的性能。 Integer中的longValue()方法只是int值的转换。 Long.valueOf()方法为vm提供了一个使用caching值的机会。

奇怪的是我发现,如果你从一个stringparsing它的作品。

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

赢得。

通过在Integer的末尾添加“L”,直接将整数转换为long。

 Long i = 1234L; 

整数转换为非常简单和许多方法来转换
例1

  new Long(your_integer); 

例2

 Long.valueOf(your_integer); 

例3

 Long a = 12345L; 

例4
如果你已经把整型input为Integer,你可以这样做:

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

如果整数不为空

整数i; Long long = Long.valueOf(i);

我会自动长时间地转型。

使用valueOf而不是new允许编译器或JVMcaching这个值(如果它很小的话),从而得到更快的代码。

Integer类中包含从intvariables到longtypes的parsing器。 这里是一个例子:

 int n=10; long n_long=Integer.toUnsignedLong(n); 

你可以很容易地使用这个内置的函数来创build一个从intlongparsing方法:

  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,你可以简单地这样做:

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

要么

 new Long(Integer.toString());