将整数转换为长整型
我需要使用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
类中包含从int
variables到long
types的parsing器。 这里是一个例子:
int n=10; long n_long=Integer.toUnsignedLong(n);
你可以很容易地使用这个内置的函数来创build一个从int
到long
parsing方法:
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());