Concurrency
ConcurrentHashMap: nullキーとnull値を許可しない
HashMapと異なり、ConcurrentHashMapはnullキー・null値のputを即座に例外にします。
SourceConcurrentMapNulls.java
Java 21
package examples.concurrency;
import java.util.concurrent.ConcurrentHashMap;
public final class ConcurrentMapNulls {
private ConcurrentMapNulls() {}
public static void putNullKey() {
new ConcurrentHashMap<String, String>().put(null, "value");
}
public static void putNullValue() {
new ConcurrentHashMap<String, String>().put("key", null);
}
}TestConcurrentMapNullsTest.java
Java 21
package examples.concurrency;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
class ConcurrentMapNullsTest {
@Test
void ConcurrentHashMapはnullキーとnull値を許可しない() {
assertThrows(NullPointerException.class, ConcurrentMapNulls::putNullKey);
assertThrows(NullPointerException.class, ConcurrentMapNulls::putNullValue);
}
}01Assertion
このテストで確認できること
- nullキーのputはNullPointerExceptionになる
- null値のputもNullPointerExceptionになる
HashMapからConcurrentHashMapへ置き換えると、nullの扱いも互換ではありません。欠損はOptionalなど別の明示的な表現で扱います。
OBSERVED RESULT
expected exception: null key → NullPointerException
actual: NullPointerException
expected exception: null value → NullPointerException
actual: NullPointerException