Я пытаюсь реализовать метод 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)
, но я понятия не имею, как поступить с первой ошибкой.