apa*_*ick 0 java string integer classcastexception linkedhashmap
我的Java应用程序显示一些奇怪的行为,我找不到解决方案.
此代码段获取LinkedHashMap键和值都是类型的内容String,并将它们写入文本文件.configWriter是类型的PrintWriter.
for (Map.Entry<String, String> entry : configMap.entireSet()) {
configWriter.println(entry.getKey() + "=" + entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)
宣布地图:
LinkedHashMap<String, String> configMap = new LinkedHashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)
它通过使用Scanner类从文本文件中读取标记来填充.
一个在地图的值是一个String只包含数字(整数),但是当循环到达此值时,它抛出一个ClassCastException,你不能从投说法Integer来String.这很有道理,但值的类型是String.
有没有办法强制Java将此值保持为String?
几乎可以肯定的是,rawtypes正在某个地方被使用,而且Integer它正在偷偷摸摸地进入地图.
识别插入地图的位置的最简单方法Integer是替换configMapwith 的初始化
Map<String, String> configMap = Collections.checkedMap(
new LinkedHashMap<String, String>(), String.class, String.class);
Run Code Online (Sandbox Code Playgroud)
如果将a以外的东西String插入到地图中,它实际上会抛出异常.我不会在生产代码中亲自使用它,但这可能是"冒出"错误的最简单方法; 你将获得一个异常和一个堆栈跟踪,以确定Integer插入的位置.
就目前而言,使用类型擦除实现泛型的方式意味着实际上没有任何东西可以阻止非String值插入到地图中.编译器会做出一些努力来阻止它,但是rawtypes和遗留代码可以绕过它.但是,使用Collections.checkedMap将强制解决问题.
| 归档时间: |
|
| 查看次数: |
830 次 |
| 最近记录: |