gpt4 book ai didi

java - 使用枚举开关时出现奇怪的编译错误

转载 作者:行者123 更新时间:2023-12-01 21:12:37 24 4
gpt4 key购买 nike

我刚刚注意到一个奇怪的案例,想看看是否有人能够解释它。这是我的案例:

private enum Classifiers {
NEURAL_NETWORK, NEAREST_NEIGHBOURS, IDENTITY;
}
private ClassifierInterface getClassifierInstance(Classifiers classifier) {
switch (classifier) {
case NEURAL_NETWORK:
return new DoubleLayeredNeuralNetwork();
case NEAREST_NEIGHBOURS:
return new NearestNeighbours();
case IDENTITY:
return new IdentityClassifier();
}
return null; // If I comment out this line I get compilation error
}

查看评论。我希望这一行会报告 Unreachable code 错误。相反,如果我注释掉这一行,我会收到 Method must return value 错误。但是,程序流程无法从那里经过。

我什至假设这将是传入 null 值的保护情况,但正如预期的那样,这会触发切换条件的 NullPointerException

我不经常使用switch,可能我在这里遗漏了一些东西。有人可以尝试帮助理解这种行为吗?

最佳答案

这是正确的行为,因为您没有默认的 case 语句。问题是您可以稍后向枚举添加一个值,而不是重新编译使用它的代码。通过强制您始终处理它不是值之一的情况,就可以解决这一问题。

顺便说一句:classifier 可能为 null,不幸的是,这是另一个选项开关无法处理的。

关于java - 使用枚举开关时出现奇怪的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361599/

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