gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:57:23 26 4
gpt4 key购买 nike

我已经检查了 java.lang.Enum 的源代码和方法 T valueOf(Class<T> enumType, String name)从第 232 行开始( 中的实现似乎相同;here 是 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);
}
name 进行空检查的原因是什么?发生 Map 中按名称查找枚举开始使用 enumConstantDirectory() ?据我所知,不能定义 null枚举;因此以下调用没有意义:
MyEnum myEnum = Enum.valueOf(MyEnum.class, null);     // The NPE should be thrown
虽然 HashMap实现允许 null作为一个关键,我希望实现会检查 null在迭代 Map 之前.这个实现的原因是什么,是否有搜索 null的情况?比较前的关键 name == null说得通?

最佳答案

99.999+% 的对该方法的调用将是有效的枚举名称。传递空名称始终是一个错误,并不是您想要优化的情况。因此将空检查向下移动三行意味着在枚举名称有效的常见情况下将跳过检查。它不会改变结果;这只是一个小小的优化。

关于java - java.lang.Enum::valueOf 为什么不首先检查空名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62552904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com