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