首页 > 解决方案 > 避免对深度复制地图进行未经检查的演员表

问题描述

我正在尝试为这样的多值映射实现 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)强制转换,但我不知道如何处理第一个错误。

标签: javaunchecked

解决方案


推荐阅读