Java 为 Integer 参数调用 String.valueOf(char[] data) 而不是 String.valueOf(int i) 并抛出 ClassCastException
Java invokes String.valueOf(char[] data) instead of String.valueOf(int i) for Integer parameter and throw ClassCastException
我在调用 String.valueOf 方法时遇到问题。作为参数,我传递了 returns 整数类型的通用方法。然后抛出异常,因为程序试图将返回的 Integer 转换为 char[] 以调用 String.valueOf 方法。据我所知,String 已经重载了 valueOf() 方法,其中之一可以采用 Integer 参数。
下面是显示情况的 Eclipse 表达式计算的屏幕截图。
这一行抛出 ClassCastException
String quality = String.valueOf(model.get(property));
这就是 model.get(属性) 调用的内容:
public <X> X get(String property) {
X value = null;
try {
if (allowNestedValues && NestedModelUtil.isNestedProperty(property)) {
return (X) NestedModelUtil.getNestedValue(this, property);
}
if (map != null) {
Object objValue = map.get(property);
if (objValue != null)
value = (X) objValue;
}
} catch (Exception e) {
}
return map == null ? null : value;
}
编辑:
我添加了这个条件,编译器进入了 if 语句
if(model.get(property) instanceof Integer)
{
quality = String.valueOf(model.get(property));
}
编译器如何按照您的调用方式推断出正确的 X
?
拆分成
YourType qualityRaw = model.get(property);
String quality = String.valueOf(qualityRaw);
如果您知道您的 return 类型是 Integer 类型,您应该尝试 Integer.toString 方法。
我在调用 String.valueOf 方法时遇到问题。作为参数,我传递了 returns 整数类型的通用方法。然后抛出异常,因为程序试图将返回的 Integer 转换为 char[] 以调用 String.valueOf 方法。据我所知,String 已经重载了 valueOf() 方法,其中之一可以采用 Integer 参数。
下面是显示情况的 Eclipse 表达式计算的屏幕截图。
这一行抛出 ClassCastException
String quality = String.valueOf(model.get(property));
这就是 model.get(属性) 调用的内容:
public <X> X get(String property) {
X value = null;
try {
if (allowNestedValues && NestedModelUtil.isNestedProperty(property)) {
return (X) NestedModelUtil.getNestedValue(this, property);
}
if (map != null) {
Object objValue = map.get(property);
if (objValue != null)
value = (X) objValue;
}
} catch (Exception e) {
}
return map == null ? null : value;
}
编辑:
我添加了这个条件,编译器进入了 if 语句
if(model.get(property) instanceof Integer)
{
quality = String.valueOf(model.get(property));
}
编译器如何按照您的调用方式推断出正确的 X
?
拆分成
YourType qualityRaw = model.get(property);
String quality = String.valueOf(qualityRaw);
如果您知道您的 return 类型是 Integer 类型,您应该尝试 Integer.toString 方法。