我正在使用一些带有泛型的代码,我不确定为什么会抛出编译错误。
public static void main(String[] args) {
System.out.print("s");
setInteger(prepareNumber("1")); // Error here! solved by casting: setInteger((Integer)prepareNumber("1"))
Integer c = prepareInteger("1");
System.out.print(c);
}
public static Integer prepareInteger(Object number) {
return prepareNumber(number).intValue();
}
private static <T extends Number> T prepareNumber(Object number) {
T returnValue = null;
// handle a blank number
if (number == null || !NumberUtils.isNumber(number.toString())) {
returnValue = null;
} else {
if (number.toString().contains(".")) {
returnValue = (T) Double.valueOf(number.toString());
} else {
returnValue = (T) Integer.valueOf(number.toString());
}
}
return returnValue;
}
private static void setInteger(Integer a){
}
只需进行强制转换即可轻松解决此问题,但这是不希望的,因为泛型应该检测方法需要 Integer 并且应该提供返回值而不是超类型。
PS:不要介意解析代码,只是测试的东西。
谢谢!