java - 避免对深度复制地图进行未经检查的演员表
问题描述
我正在尝试为这样的多值映射实现 deepCopy 方法:
public static <K, V> ListValuedMap<K, V> deepCopy (ListValuedMap<K, V> a) {
ListValuedMap<K, V> result = new ArrayListValuedHashMap<>();
a.asMap().forEach((key, value) -> {
Object newValue;
if (value instanceof ListValuedMap) {
newValue = deepCopy((ListValuedMap<K, V>) value);
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
unchecked cast!
} else if (value instanceof Cloneable) {
try {
Method clone = value.getClass().getDeclaredMethod("clone");
newValue = clone.invoke(value);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
} else {
newValue = value;
}
result.put(key, (V) newValue);
‾‾‾
unchecked cast !
});
return result;
}
可以通过传递V
值类型参数参数的类并使用来避免第二个 UncheckedvClass.cast(newValue)
强制转换,但我不知道如何处理第一个错误。
解决方案
推荐阅读
- javascript - 如何解决 TypeError: angular.element(...).scope(...).selectFileForUpload is not a function
- java - ORA-02049: 超时: 分布式事务在多线程环境中等待锁定
- windows - 批处理程序在第五个斜线后删除 txt 中的所有内容
- python - pyuno 在 libreoffice 中缺少符号并且无法使用 python2
- html - WebAPP Quiz html - 从谷歌电子表格中读取数据 - 选择工作表
- c++ - 关联容器的下界复杂度:成员函数与非成员函数
- python - 在蛇形教程环境中导入 matplotlib 错误
- r - strwidth 中的错误(图例,单位 =“用户”,cex = cex,字体 = text.font):尚未调用 plot.new
- .net-core - 本地主机上的 .NET Core WsFederation 身份验证登录循环
- javascript - 出生日期字段的三个文本框?