zoukankan      html  css  js  c++  java
  • Java 从无类型参数Map到有类型参数Map传值的一个问题

    import java.util.HashMap;
    import java.util.Map;
    
    public class MapTest {
    
        public static void main(String[] args) {
            Map map = new HashMap();
            map.put("one", 1);
            func(map);
        }
    
        public static void func(Map<String, String> map) {
            System.out.println(map.get("one"));
        }
    
    }

    如上代码运行报:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

    原因:func方法在编译时,println方法默认用的是:

    public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

    println的入参是String类型,这是根据func方法的入参Map<String, String> map推断而来的。

    main函数中的map没有提供类型参数,默认是Map<Object,Object>,虽然实际是Map<String,Integer>,但传给func是不会报错的。

    println虽然有无数个重载版本,也有int的入参,但这里却被编译器限死了只能用String的入参,导致报ClassCastException。

  • 相关阅读:
    100篇论文
    Tengine vs openresty
    Dottrace跟踪代码执行时间
    Linux Server
    Linux+Apache+Mysql+Php
    linux+nginx+mysql+php
    tshark命令行的使用(转)
    tcpdump VS tshark用法(转)
    Lua语言在Wireshark中使用(转)
    doc-remote-debugging.html
  • 原文地址:https://www.cnblogs.com/shuada/p/6571261.html
Copyright © 2011-2022 走看看