私はちょうど1つの好奇心が強いケースに気づいて、誰かがそれを説明できるかどうかを見たいと思っていました。ここに私の場合です:列挙型のスイッチを使用しているときの奇妙なコンパイルエラー
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
を使用しません、おそらく私はここに何かを逃しています。誰かがこの行動を理解するのを手伝ってくださいできますか?
コンパイラは、それは常に何かと 'リターンを返すことを確認するために十分にスマートではありませんなぜ私はいつもあまりにも不思議に思いました「ヌル」は冗長である。 –