为什么有时候object能强转成Integer,有时候不行,如何避免此问题

96
迷雾中行走
2018.01.23 09:41 字数 311

问题来源:有时我们用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 类型,用的时候要注意不要强转。

日记本
Web note ad 1