• 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。

  • 相关阅读:
    如何从ORACLE数据库生成HBM和JAVA
    timer
    工作流研究
    linux date命令设置时间
    耶基斯多得森曲线
    朋友考我的一个基础语法题
    微软企业库(一)
    标记属性
    Word自动化撤销、重做功能
    汇编中的ASSUME
  • 原文地址:https://www.cnblogs.com/shuada/p/6571261.html
Copyright © 2020-2023  润新知