6

みんな。Java の戻り値について初歩的な質問があります。これが私のコードです。

@Override
public long addDrugTreatment(long id, String diagnosis, String drug,
        float dosage) throws PatientNotFoundExn {
    try {
        Patient patient = patientDAO.getPatientByDbId(id);
        long tid = patient.addDrugTreatment(diagnosis, drug, dosage);

        Connection treatmentConn = treatmentConnFactory.createConnection();
        Session session = treatmentConn.createSession(true, Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(treatmentTopic);

        TreatmentDto treatment = null;
        ObjectMessage message = session.createObjectMessage();
        message.setObject(treatment);
        producer.send(message);

        return tid;
    } catch (PatientExn e) {
        throw new PatientNotFoundExn(e.toString());
    } catch (JMSException e) {
        logger.severe("JMS Error: " + e);
    }
}

Eclipse は、「このメソッドは long 型の結果を返す必要があります」というエラーを報告します。それでも、try ブロックで tid を返しました。eclipse は、try/catch ブロックの後に戻り値を追加することを提案していますが、これはロジックを壊します。ここで何が悪いのか教えてください。ありがとう。

4

6 に答える 6

3

Java(または他のCのような言語)では、すべての制御パスが値を返す必要があります。

内部で例外がスローされた場合、はtry実行returnされないため、すべての可能な制御パスで値を返すことはありません。

次のいずれかを行う必要があります。

  1. またはのreturn後にを追加しますtry-catch
  2. returnそれぞれの中に追加するcatch
  3. を追加finallyreturnます。
于 2012-04-12T14:44:44.767 に答える
0
catch (JMSException e) {
        logger.severe("JMS Error: " + e);
        //You need to throw exception here or return something
        //better would be throw new Exception("JMS Error: " + e);
    }
于 2012-04-12T14:44:53.350 に答える