将整数转换为长整数

时间:2011-07-14 08:57:05

标签: java reflection casting

我需要使用反射来获取字段的值。碰巧我并不总是确定该字段的数据类型是什么。为此,为了避免一些代码重复,我创建了以下方法:

@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。

17 个答案:

答案 0 :(得分:113)

简单地:

Integer i = 7;
Long l = new Long(i);

答案 1 :(得分:80)

不,即使您可以从Integer转换为Long,也无法将int转换为long。对于已知为数字的个人值,您希望获得长值,您可以使用:

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();

对于数组,它会更棘手......

答案 2 :(得分:44)

Integer i = 5; //example

Long l = Long.valueOf(i.longValue());

这可以避免转换为String时的性能损失。 Integer中的longValue()方法只是int值的强制转换。 Long.valueOf()方法为vm提供了使用缓存值的机会。

答案 3 :(得分:18)

奇怪的是,我发现如果你从一个字符串解析就可以了。

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

答案 4 :(得分:8)

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

Long i = 1234L;

答案 5 :(得分:6)

将整数转换为长非常简单且有很多方法来转换 例1

 new Long(your_integer);

示例2

Long.valueOf(your_integer); 

示例3

Long a = 12345L;

例4    如果您已将int类型化为Integer,则可以执行以下操作:

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

答案 6 :(得分:5)

如果整数不为空

Integer i;
Long long = Long.valueOf(i);

i将自动强制转换为long

使用valueOf而不是new允许编译器或JVM缓存此值(如果它很小),从而产生更快的代码。

答案 7 :(得分:4)

((Number) intOrLongOrSomewhat).longValue()

答案 8 :(得分:2)

如果你知道Integer不是NULL,你可以这样做:

Integer intVal = 1;
Long longVal = (long) (int) intVal

答案 9 :(得分:1)

new Long(Integer.longValue());

new Long(Integer.toString());

答案 10 :(得分:1)

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;
}

答案 11 :(得分:1)

对于可为空的包装器实例,

Integer i;
Long l = Optional.ofNullable(i)
                 .map(Long::valueOf)
                 .orElse(null);

答案 12 :(得分:0)

这是null安全的

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp == null ? null : tmp.longValue();

答案 13 :(得分:0)

如果您不知道电话号码的确切类别(整数 Double ,等等),则可以强制转换为 Number 并从中获取您的长期价值:

Object num = new Integer(6);
Long longValue = ((Number) num).longValue();

答案 14 :(得分:0)

使用以下命令:Long.valueOf(int);

(Long) int ;

答案 15 :(得分:-1)

如果是Long类型的List,则将L添加到每个Integer值的末尾

List<Long> list = new ArrayList<Long>();
list  = Arrays.asList(1L, 2L, 3L, 4L);

答案 16 :(得分:-1)

尝试通过Jackson转换Value

ObjectMapper mapper = new ObjectMapper()
Integer a = 1;
Long b = mapper.convertValue(a, Long.class)