1

次のコードは悪い習慣と見なされますか? それ以外でできると思いますか?目標は、成功した場合 (つまり、service.invoke(id); への呼び出しが正常に返された場合) または失敗した場合のいずれかで、常にステータスを更新することです...

@Autowired
private Service service;

public void onMessage(Message message) {

    String id = null;
    String status = "FAILED";

    try {
        id = ((TextMessage) message).getText();
        status = service.invoke(id); //can throw unchecked exception
    } catch (final JMSException e) {
        throw new RuntimeException(e);
    } finally {
        if (StringUtils.isNumeric(id)) {
        service.update(id, status);
        }
    }
}
4

2 に答える 2

0

前のステップに基づいてステップを実行する必要があるかどうかは、ユースケースによって異なります。finallyを使用すると、受け取る例外に関係なく、2番目のステップが実行される場合があります。

ブロックの外側に2番目のステップをtry...catch設定して、予期した例外が発生した場合にのみ更新し、2番目のステップに進むことをお勧めします。そうしないと、メソッドがスローされて終了します。

于 2013-03-11T14:21:28.243 に答える