diff --git a/src/java.base/share/classes/java/util/Collections.java b/src/java.base/share/classes/java/util/Collections.java index 63949db2cc0..4ec5756f712 100644 --- a/src/java.base/share/classes/java/util/Collections.java +++ b/src/java.base/share/classes/java/util/Collections.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -4050,6 +4050,7 @@ public V compute(K key, public V merge(K key, V value, BiFunction remappingFunction) { Objects.requireNonNull(remappingFunction); + typeCheck(key, value); return m.merge(key, value, (v1, v2) -> { V newValue = remappingFunction.apply(v1, v2); typeCheck(null, newValue); diff --git a/test/jdk/java/util/Collections/CheckedMapBash.java b/test/jdk/java/util/Collections/CheckedMapBash.java index 240ce649285..a8e3fd9e952 100644 --- a/test/jdk/java/util/Collections/CheckedMapBash.java +++ b/test/jdk/java/util/Collections/CheckedMapBash.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,13 +23,14 @@ /* * @test - * @bug 4904067 5023830 7129185 8072015 + * @bug 4904067 5023830 7129185 8072015 8292955 * @summary Unit test for Collections.checkedMap * @author Josh Bloch * @run testng CheckedMapBash * @key randomness */ +import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -183,4 +184,11 @@ public static Collection makeCheckedMaps() { }; return Arrays.asList(params); } + + @Test(groups = "type_check") + public static void testCheckedMapMerge() { + Map m = Collections.checkedMap(new HashMap<>(), Integer.class, Integer.class); + Assert.assertThrows(ClassCastException.class, () -> m.merge("key", "value", (v1, v2) -> null)); + Assert.assertThrows(ClassCastException.class, () -> m.merge("key", 3, (v1, v2) -> v2)); + } }