博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 从无类型参数Map到有类型参数Map传值的一个问题
阅读量:5039 次
发布时间:2019-06-12

本文共 813 字,大约阅读时间需要 2 分钟。

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

 

转载于:https://www.cnblogs.com/shuada/p/6571261.html

你可能感兴趣的文章
数据结构之查找算法总结笔记
查看>>
Linux内核OOM机制的详细分析
查看>>
Android TextView加上阴影效果
查看>>
Requests库的基本使用
查看>>
C#:System.Array简单使用
查看>>
C#inSSIDer强大的wifi无线热点信号扫描器源码
查看>>
「Foundation」集合
查看>>
算法时间复杂度
查看>>
二叉树的遍历 - 数据结构和算法46
查看>>
类模板 - C++快速入门45
查看>>
[转载]JDK的动态代理深入解析(Proxy,InvocationHandler)
查看>>
centos7 搭建vsftp服务器
查看>>
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>
HTML&CSS基础学习笔记1.28-给网页添加一个css样式
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
CSS兼容性常见问题总结
查看>>