Java valeur de retour (dans le try/catch clause)
tout le monde. J'ai une recrue question sur le retour de la valeur en java. Voici mon code.
@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 signale un "Cette méthode doit retourner un résultat de type long" erreur. Pourtant, je n'ai retourner le tid dans le bloc try; eclipse suggère d'ajouter une valeur de retour après le bloc try/catch, qui permettrait de sortir de la logique. Pourriez-vous s'il vous plaît dites-moi ce qui va pas ici? Merci.
- il n'y a aucune garantie que votre code à atteindre le point où vous revenez d'un long valide de valeur. Vous devez avoir une valeur de retour par défaut dans le cas où une exception se produit
- catch (JMSException e) { logger.grave("JMS message d'Erreur:" + e); } ici, vous doens pas de garantie d'une valeur de retour, il suffit d'ajouter un retour ou d'un jet et de travail
Vous devez vous connecter pour publier un commentaire.
Lorsqu'un
JMSException
est levée la valeur de retour n'est pas défini. Lorsqu'une exception est levée, le contrôle passe immédiatement au gestionnaire d'exception. Dans ce cas, vous devez vous connecter à l'erreur. Ensuite, la lutte se poursuit à partir de ce point qui va à la fin de la fonction, sans avoir à retourner une valeur. Vous avez besoin soit de retourner une valeur ou lever une exception.En Java (ou toute autre langue) tous les chemins de contrôle doit retourner une valeur.
Si une exception est générée à l'intérieur de la
try
puis lereturn
ne sera pas exécuté et si vous n'êtes pas retourner une valeur sur tous les possibles chemins de contrôle.Vous devez soit:
return
après latry-catch
oureturn
à l'intérieur de chaquecatch
oufinally
avec unreturn
.Il existe une route par votre code, ce qui signifie qu'il n'y aurait pas de retour de la valeur définie, ce qui est une erreur, car votre méthode a dit que vous serez toujours au retour d'un long.
Attendez-vous de retourner une valeur, même si le code lance un JMSException?
Si oui, peut-être déclarer tld à l'extérieur de l'essayer avec une valeur par défaut.
D'autre avez-vous vraiment voulu re-jeter le JMSException?
Le problème ici est que, avec des méthodes peu importe la route que le code prend, il doit retourner le type spécifié si l'exécution de la méthode est terminée. Si votre problème dans ce code est la deuxième prise. La première prise renvoie une erreur et, par conséquent, la méthode ne permet pas l'exécution complète et n'a donc pas besoin d'une instruction return. Cependant, dans votre deuxième attraper vous suffit d'imprimer une erreur, la méthode execute jusqu'à la fin si retourne donc à une longue. La façon de résoudre ce problème est de mettre appropriée long de votre code doit être retourné dans la deuxième capture, ou de jeter le JMSException et de traiter avec que, dans le code qui appelle cette méthode. Remarque si vous jetez dans le catch, vous devrez ajouter les jeter à votre déclaration de méthode.
Imaginons un JMSException était jeté:
Dans le ci-dessus si un JMSException est jeté aucune partie du code renvoie une longue.