将整数转换为长整型
我需要使用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); 
 问题是,我似乎无法将Integer为Long : 
 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一个从int到longparsing方法: 
  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());