将整数转换为长整数

Tia*_*oso 100 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;
}
Run Code Online (Sandbox Code Playgroud)

并使用此方法,如:

Long value1 = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Run Code Online (Sandbox Code Playgroud)

要么

Double[] value2 = getValueByReflection(inv.var2(), classUnderTest, runtimeInstance);
Run Code Online (Sandbox Code Playgroud)

问题是,我似乎无法施展IntegerLong:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Run Code Online (Sandbox Code Playgroud)

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

我使用的是Java 1.6.

vah*_* kh 127

只是:

Integer i = 7;
Long l = new Long(i);
Run Code Online (Sandbox Code Playgroud)

  • 应使用Long.valueof:http://stackoverflow.com/questions/2974561/new-integer-vs-valueof (11认同)
  • 如果Integer为null,则抛出NPE (9认同)
  • `new Long` 已被弃用 (3认同)
  • 适用于`int`值. (2认同)

Jon*_*eet 84

不,你不能施放IntegerLong,即使你可以转换intlong.对于已知为数字且您希望获得长值的单个值,您可以使用:

Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();
Run Code Online (Sandbox Code Playgroud)

对于阵列,它会更棘手......

  • 为什么你不能从一个整数转为长? (6认同)
  • 好.问题是继承.我在考虑精确度.可以将整数转换为长整数而不会丢失信息.但是继承结构没有任何可以告诉编译器的信息. (6认同)

小智 48

Integer i = 5; //example

Long l = Long.valueOf(i.longValue());
Run Code Online (Sandbox Code Playgroud)

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

  • 要为空保存: Long l = i == null ?null : i.longValue() (3认同)

小智 19

奇怪的是,我发现如果你从一个字符串解析它是有效的.

 int i = 0;
 Long l = Long.parseLong(String.valueOf(i));
 int back = Integer.parseInt(String.valueOf(l));
Run Code Online (Sandbox Code Playgroud)

赢得.

  • 毫无理由地引入字符串转换是一个非常糟糕的主意......这样做没有任何好处. (32认同)
  • 同意@JonSkeet,最好用这个:对象i = 10;长l =((数字)i).longValue(); (6认同)
  • 从前端开发人员的角度看起来很棒 (2认同)

Jef*_*hny 8

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

Long i = 1234L;
Run Code Online (Sandbox Code Playgroud)

  • 我相信你没有阅读整个问题就回答了! (5认同)
  • @Diablo这个问题是在Google上搜索“ int to long”时的第一个结果,此答案可能对其他人有用 (3认同)

Nar*_*mar 8

将Integer转换为Long非常简单且转换
示例1的方法很多

 new Long(your_integer);
Run Code Online (Sandbox Code Playgroud)

例2

Long.valueOf(your_integer); 
Run Code Online (Sandbox Code Playgroud)

例3

Long a = 12345L;
Run Code Online (Sandbox Code Playgroud)

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

Integer y = 12;
long x = y.longValue();
Run Code Online (Sandbox Code Playgroud)


los*_*ion 6

如果Integer不为null

Integer i;
Long long = Long.valueOf(i);
Run Code Online (Sandbox Code Playgroud)

i将自动类型转换为long

使用valueOf而不是new允许编译器或JVM缓存此值(如果较小),从而加快代码速度。

  • Integer 隐式转换为原始 long 类型。 (3认同)

cin*_*ata 5

((Number) intOrLongOrSomewhat).longValue()
Run Code Online (Sandbox Code Playgroud)