java.lang.Enum::valueOf 为什么不首先检查空名称?

Nik*_*las 8 java enums

我已经检查了从第 232 行开始的源代码java.lang.Enum和方法T valueOf(Class<T> enumType, String name)似乎相同;这里是 Java 8 的源代码)。

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) {
    T result = enumType.enumConstantDirectory().get(name);
    if (result != null)
        return result;
    if (name == null)
        throw new NullPointerException("Name is null");
    throw new IllegalArgumentException(
        "No enum constant " + enumType.getCanonicalName() + "." + name);
}
Run Code Online (Sandbox Code Playgroud)

在get using 中按名称查找枚举name发生空检查的原因是什么?据我所知,不能定义枚举;因此以下调用没有意义:MapenumConstantDirectory()null

MyEnum myEnum = Enum.valueOf(MyEnum.class, null);     // The NPE should be thrown
Run Code Online (Sandbox Code Playgroud)

尽管HashMap实现允许null作为键,但我希望实现会null在迭代Map. 这种实现的原因是什么,是否存在null在比较之前搜索密钥name == null有意义的情况?