问题来源:有时我们用Map map方式传参,当我们要对参数进行操作时会发现,有时候object能强转成Integer,有时候不行。
举例:
public class Show {
public static void main(String[] args) throws ParseException {
Integer integer = new Integer(1);
String string = "2";
Show show = new Show();
Map param = new HashMap<>();
show.change(param);
}
public void change(Map args){
Integer integer = (Integer) args.get("integer");
Integerstring = (Integer) args.get("string");
}
}
原因:object类型的参数也是有格式的,以Integer或String类型放入Map map传参,得到的也是Integer或String类型。这就导致本来就是Integer类型的,可以强转为Integer类型(如 Integer integer = (Integer) args.get("integer");),
而本来是String类型的,就不能强转为Integer类型( Integerstring = (Integer) args.get("string"); ).虽然编译能通过,但是运行的时候是会报java.lang.String cannot be cast to java.lang.Integer,这个错的。
这是因为String类型是不能强转为Integer类型的。
解决方法是:1:Integer string = Integer.parseInt(String.valueOf(args.get("string")));
2:Integer string = Integer.parseInt(args.get("string").toString());
拓展:我们用request.getParameter(String name)时返回的是String 类型,用的时候要注意不要强转。
网友评论