Java 从无类型参数Map到有类型参数Map传值的一个问题
2024-08-31 23:51:31
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。
最新文章
- jQuery方法position()与offset()区别
- xcopy中提示“无效的参数数量”的解决方法
- easyui.combotree.search.js
- xcode4.5应用程序本地化
- GridView布局及适配器优化
- oracle数据泵之解决方案(用户)导入导出。
- JAVA发送邮件的DEMO
- 九、 Spring Boot 拦截器
- [Apio2010] 巡逻
- Mybatis插件机制以及PageHelper插件的原理
- Logistic回归计算过程的推导
- WebApi实现验证授权Token,WebApi生成文档等(转)
- etcd-v2第二集
- Shell脚本 | 性能测试之内存
- Unity Package Manager Error的解决方案
- shell中交互输入自动化
- golang的json操作[转]
- linux 提示符绝对路径
- mysql客户端(Navicat)远程登录操作遇到问题1142 - XXX command denied to &#215;&#215;&#215;
- VS2012/2013引用对话框的糟糕设计