将Integer转换为Long



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

@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 i = 7;
Long l = new Long(i);

否,即使可以从int转换为long,也不能将Integer强制转换为Long。对于已知为数字的单个值,并且您想要获得长值,可以使用:

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

对于数组来说,这将更加棘手。。。

Integer i = 5; //example
Long l = Long.valueOf(i.longValue());

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

奇怪的是,我发现如果从字符串进行解析,它就可以工作。

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

获胜。

如果Integer不是空

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

CCD_ 9将被自动类型转换为CCD_。

使用valueOf而不是new可以让编译器或JVM缓存这个值(如果它很小(,从而产生更快的代码。

将Integer转换为Long非常简单以及多种转换方法
示例1

 new Long(your_integer);

示例2

Long.valueOf(your_integer); 

示例3

Long a = 12345L;

示例4
如果你已经把int类型化为Integer,你可以这样做:

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

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

Long i = 1234L;
((Number) intOrLongOrSomewhat).longValue()

如果您知道Integer不是NULL,您可以简单地执行以下操作:

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

new Long(Integer.toString());

如果您不知道数字的确切类别(整数,等等(,您可以转换为数字并从中获取长值:

Object num = new Integer(6);
Long longValue = ((Number) num).longValue();
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;
}

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

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

要将Integer转换为Long,只需强制转换整数值

Integer intValue = 23;
Long longValue = (long) intValue;

这是空安全

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

如果列表类型为Long,则在每个整数值的末尾添加L

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

尝试通过Jackson 转换值

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

相关内容

  • 没有找到相关文章

最新更新