@CheckForNull
  public V getNullable(K key) {
    V value = map.get(key);
    if (value == null && !map.containsKey(key)) {
      value = loader.load(key);
      map.put(key, value);
    }
    return value;
  }
@Test
  public void getNullable() {
    when(loader.load("foo")).thenReturn("bar");
    assertThat(cache.getNullable("foo")).isEqualTo("bar");
    assertThat(cache.getNullable("foo")).isEqualTo("bar");
    verify(loader, times(1)).load("foo");

    // return null if key not found
    assertThat(cache.getNullable("not_exists")).isNull();

    // clear cache -> new calls to CacheLoader
    cache.clear();
    assertThat(cache.getNullable("foo")).isEqualTo("bar");
    verify(loader, times(2)).load("foo");
  }