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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,914评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,769评论 0 33
  • 登波喝酒光伟陪 绪生抽烟掩饰累 家住附近常小聚 只是苦了肠与胃
    卢微阅读 357评论 15 13
  • 林笑颜,人如其名,她总是一副喜笑颜开的样子,是个如太阳花般灿烂的姑娘。一对细长的眼睛笑起来宛如天边的月牙,如...
    若眠蝉阅读 444评论 2 2