2016-05-19 3 views
0

をコンパイルする私は、次の機能を持っている:がエラー

private Box retrieveBox() { 
    BoxParameter param = new BoxParameter("red", 10, 5, 3); 
    List<Long> boxIds = boxDao.retrieveByParameter(param); 

    if (boxIds.isEmpty()) { 
     // A 
     logger.warn("box not found"); 
     throw new BoxNotFoundException(); 
    } 
    if (boxIds.size() > 1) { 
     // B 
     logger.warn("multiple boxes found"); 
     throw new MultipleBoxesFoundException(); 
    } 

    Optional<Box> maybe = boxDao.retrieve(boxIds.get(0)); 
    if (maybe.isPresent()) { 
     return maybe.get(); 
    } 

    // C 
    logger.warn("box not found"); 
    throw new BoxNotFoundException(); 
} 

私は法にログインし、例外をリファクタリングしようとするとlogWarningAndThrowException()と呼ばれ、私はそれを見つけた:

  • A及びBは、
  • Cを方法中に抽出された場合、Eclipseは
「このメソッドは、型箱の結果を返さなければならない」というプロンプトをリファクタリングすることができます

私はその理由が不思議です。

Cをメソッドに抽出する方法はありますか?

+0

あなたのリファクタリングされたコードを見ることなく、それを伝えることは不可能です。 – stdunbar

+0

コードレビューから[codereview](http://codereview.stackexchange.com/questions/129976/throwing-exceptions-if-there-is-not-exactly-one-box-retrieved)の質問をしました視点。 –

答えて

1

戻り値の型がvoid以外のメソッドは、その型の値を返すか、メソッドの実行を終了するために例外をスローする必要があります。

あなたの現在の状態では、あなたのメソッドは、メソッドの実行を終了するには、例外をスローしますが、あなたは他の方法にC partを移動した場合、あなたのretrieveBox方法は、通常の完了をタイプBoxの値を返す必要があります。

したがって、日食は不平を言っています。