LinkedCaseInsensitiveMap properly overrides HashMap.clone()
Issue: SPR-14509
This commit is contained in:
parent
249b798059
commit
dd65f7acfc
|
@ -36,7 +36,7 @@ import java.util.Map;
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> {
|
public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> {
|
||||||
|
|
||||||
private final Map<String, String> caseInsensitiveKeys;
|
private Map<String, String> caseInsensitiveKeys;
|
||||||
|
|
||||||
private final Locale locale;
|
private final Locale locale;
|
||||||
|
|
||||||
|
@ -151,6 +151,14 @@ public class LinkedCaseInsensitiveMap<V> extends LinkedHashMap<String, V> {
|
||||||
super.clear();
|
super.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public Object clone() {
|
||||||
|
LinkedCaseInsensitiveMap<V> copy = (LinkedCaseInsensitiveMap<V>) super.clone();
|
||||||
|
copy.caseInsensitiveKeys = new HashMap<>(this.caseInsensitiveKeys);
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the given key to a case-insensitive key.
|
* Convert the given key to a case-insensitive key.
|
||||||
|
|
|
@ -74,4 +74,26 @@ public class LinkedCaseInsensitiveMapTests {
|
||||||
assertEquals("N", map.getOrDefault(new Object(), "N"));
|
assertEquals("N", map.getOrDefault(new Object(), "N"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void mapClone() {
|
||||||
|
map.put("key", "value1");
|
||||||
|
LinkedCaseInsensitiveMap<String> copy = (LinkedCaseInsensitiveMap<String>) map.clone();
|
||||||
|
assertEquals("value1", map.get("key"));
|
||||||
|
assertEquals("value1", map.get("KEY"));
|
||||||
|
assertEquals("value1", map.get("Key"));
|
||||||
|
assertEquals("value1", copy.get("key"));
|
||||||
|
assertEquals("value1", copy.get("KEY"));
|
||||||
|
assertEquals("value1", copy.get("Key"));
|
||||||
|
copy.put("Key", "value2");
|
||||||
|
assertEquals(1, map.size());
|
||||||
|
assertEquals(1, copy.size());
|
||||||
|
assertEquals("value1", map.get("key"));
|
||||||
|
assertEquals("value1", map.get("KEY"));
|
||||||
|
assertEquals("value1", map.get("Key"));
|
||||||
|
assertEquals("value2", copy.get("key"));
|
||||||
|
assertEquals("value2", copy.get("KEY"));
|
||||||
|
assertEquals("value2", copy.get("Key"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue