避免未经检查的演员表进行深度复制

时间:2018-11-16 10:17:50

标签: java unchecked

我正在尝试为多值地图实现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值类型参数参数的类并使用vClass.cast(newValue)来避免进行第二次Unchecked强制转换,但是我不知道如何处理第一个错误。

0 个答案:

没有答案