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