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)
问题是,我似乎无法施展Integer到Long:
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)
Jon*_*eet 84
不,你不能施放Integer到Long,即使你可以转换int到long.对于已知为数字且您希望获得长值的单个值,您可以使用:
Number tmp = getValueByReflection(inv.var1(), classUnderTest, runtimeInstance);
Long value1 = tmp.longValue();
Run Code Online (Sandbox Code Playgroud)
对于阵列,它会更棘手......
小智 48
Integer i = 5; //example
Long l = Long.valueOf(i.longValue());
Run Code Online (Sandbox Code Playgroud)
这样可以避免转换为String时的性能损失.longValue()Integer中的方法只是int值的强制转换.该Long.valueOf()方法为vm提供了使用缓存值的机会.
小智 19
奇怪的是,我发现如果你从一个字符串解析它是有效的.
int i = 0;
Long l = Long.parseLong(String.valueOf(i));
int back = Integer.parseInt(String.valueOf(l));
Run Code Online (Sandbox Code Playgroud)
赢得.
通过将"L"添加到Integer的末尾,将整数直接转换为long.
Long i = 1234L;
Run Code Online (Sandbox Code Playgroud)
将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)
如果Integer不为null
Integer i;
Long long = Long.valueOf(i);
Run Code Online (Sandbox Code Playgroud)
i将自动类型转换为long。
使用valueOf而不是new允许编译器或JVM缓存此值(如果较小),从而加快代码速度。
| 归档时间: |
|
| 查看次数: |
340899 次 |
| 最近记录: |