这是一个简单的库,可以用作解决方法:
package xxxx;
import java.util.*;
import org.eclipse.jdt.annotation.*;
public class NullUtil
{
@SuppressWarnings ("null")
public static <@NonNull K, @NonNull T> @NonNull Optional<@Nullable T> get (@NonNull Map<@NonNull K, @NonNull T> m, @NonNull K key)
{
return Optional.ofNullable(m.get(key));
}
@SuppressWarnings ("null")
public static <@NonNull K, @NonNull T> @NonNull T getOrThrow (@NonNull Map<@NonNull K, @NonNull T> m, @NonNull K key)
{
return Optional.ofNullable(m.get(key)).orElseThrow(
() -> new RuntimeException("Map does not contain element '" + key + "'"));
}
@SuppressWarnings ("null")
public static <@NonNull K, @NonNull T> @Nullable T getOrNull (@NonNull Map<@NonNull K, @NonNull T> m, @NonNull K key)
{
return Optional.ofNullable(m.get(key)).orElse(null);
}
}
以下是一些示例用法:
package xxxx;
import static org.junit.Assert.*;
import java.util.*;
import org.eclipse.jdt.annotation.NonNull;
import org.junit.*;
public class NullUtilTest
{
@Before
public void setup ()
{
_m.put("a", "va");
_m.put("b", "vb");
_m.put("c", "vc");
}
@Test
@SuppressWarnings ("null")
public void testOptional ()
{
assertTrue(NullUtil.get(_m, "a").isPresent());
assertFalse(NullUtil.get(_m, "x").isPresent());
assertEquals("va", NullUtil.get(_m, "a").orElse(null));
assertEquals(null, NullUtil.get(_m, "x").orElse(null));
}
@Test
public void testOrNull ()
{
assertEquals("va", NullUtil.getOrNull(_m, "a"));
assertEquals(null, NullUtil.getOrNull(_m, "x"));
}
@Test
public void testOrThrow ()
{
assertEquals("va", NullUtil.getOrThrow(_m, "a"));
try
{
assertEquals("vx", NullUtil.getOrThrow(_m, "x"));
fail();
}
catch (Exception e)
{
assertEquals("Map does not contain element 'x'", e.getMessage());
}
}
private final @NonNull Map<@NonNull String, @NonNull String> _m = new HashMap<>();
}