我刚刚注意到一个奇怪的情况,并想看看是否有人能够解释它。这里是我的情况:在枚举上使用开关时出现奇怪的编译错误
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
,可能我在这里错过了一些东西。有人可以尝试帮助理解这种行为吗?
我一直想知道为什么过编译器是不是足够聪明地看到,它总是返回的东西和'返回空'是多余的。 – 2012-04-28 07:45:15