Java返回值(在try/catch子句中)

mag*_*con 6 java return try-catch

大家.我有一个关于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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse报告"此方法必须返回long类型的结果"错误.然而我确实在try块中返回了tid; eclipse建议在try/catch块之后添加一个返回值,这会破坏逻辑.你能告诉我这里有什么问题吗?谢谢.

D.S*_*ley 9

当一个JMSException被抛出的返回值是不确定的.抛出异常时,控制立即传递给异常处理程序.在这种情况下,您记录错误.然后控制从该点继续,直到函数结束而不返回值.您需要返回一个值或抛出异常.

  • 这是正确的,但更多解释可能会有所帮助.在捕获PatientExn的情况下,您抛出它,因此不需要返回值.在JMSException的情况下,您从try/catch块的END记录错误并继续执行方法.因此永远不会达到return语句.您需要在JMSException catch块中或在方法结束时使用另一个return语句.如果您不想返回值,则抛出JMSException. (2认同)