爪哇 - 绘制地图

2022-09-02 01:27:00

如何以最干净的方式投掷?Map<Object,Object>Map<String,String>

有没有办法在不迭代地图的情况下做到这一点?

谢谢


答案 1

实际答案是:

Map<Object,Object> valueMap = ...;
@SuppressWarnings("unchecked")
Map<String,String> targetMap = (Map)valueMap;

答案 2

我认为解释为什么简单的解决方案不起作用以及为什么你永远不应该使用它是一个好主意。

假设你可以投射到(这同样适用于Map,只是一个更简单的界面)。您希望从以下代码中发生什么情况:List<Object>List<String>

List<Object> m = Something;
m.add("Looks good.");
m.add(42);
List<String> s = (List<String>)m; // uhuh, no we don't want that.
String myString = s.get(1); // huh exception here.

现在你可以使用Bohemians/Chris解决方案破解它,但你基本上摧毁了Java的类型系统。别这样。您不希望 a 包含整数!以后有乐趣调试 - 循环遍历所有变量的额外代码将避免很多麻烦,并且几乎不是性能问题。List<String>

如果有理由将Map声明为采用对象而不是字符串,有人可以向其添加任何对象 - 通常您应该能够使用更好的通用来避免这种情况。


推荐