Java 如何在不使用“throws XXXException”的情况下处理“未处理的异常”
我有一个任务,需要在不使用throws-XXXException的情况下处理未处理的异常。情况如下: 我需要重试一个抛出JMSException的方法Java 如何在不使用“throws XXXException”的情况下处理“未处理的异常”,java,exception,Java,Exception,我有一个任务,需要在不使用throws-XXXException的情况下处理未处理的异常。情况如下: 我需要重试一个抛出JMSException的方法 public void retry(int retryCount) throws MessageGatewayException, JMSException { restartConnection(); // } 在我的send方法中,我调用retry public void send(int retryCount) throws Me
public void retry(int retryCount) throws MessageGatewayException, JMSException {
restartConnection(); //
}
在我的send方法中,我调用retry
public void send(int retryCount) throws MessageGatewayException {
//exit method if retried enough times.
if(retryCount > someNumber)
throw new IllegalArgumentException();
try {
producer.send();
}
catch (JMSException e) {
retry(retryCount); // this is where Unhandled Exception is.
}
}
我要做的是当从发送调用retry时,如果restartConnection失败并引发JMSException,我希望retry调用sendretryCount++。我不想在send方法上添加JMSException,但它说我需要实现它。有没有办法处理异常,这样发送时就不会有JMSException?所以我找到了一种方法来处理这个异常,但我不确定这是正常的做法。以下是我所做的:
public void send(int retryCount) throws MessageGatewayException {
//exit method if retried enough times.
if(retryCount > someNumber)
throw new IllegalArgumentException();
try {
producer.send();
}
catch (JMSException e) {
try {
retry(retryCount); // this is where Unhandled Exception is
}
catch (JMSException ex) {
send(++retryCount);
}
}
}
因此,我基本上是在catch块中使用另一个try/catch块。这确实消除了错误,而且效果很好,但我不确定这是正确的做法。因此我找到了一种处理方法,但我不确定这是正常的做法。以下是我所做的:
public void send(int retryCount) throws MessageGatewayException {
//exit method if retried enough times.
if(retryCount > someNumber)
throw new IllegalArgumentException();
try {
producer.send();
}
catch (JMSException e) {
try {
retry(retryCount); // this is where Unhandled Exception is
}
catch (JMSException ex) {
send(++retryCount);
}
}
}
因此,我基本上是在catch块中使用另一个try/catch块。这确实消除了错误,而且工作正常,但我不确定这是正确的方法。您可以使用retryCount+1调用该方法,但当您达到例如10时,引发异常以避免无限错误 在发送中处理它
您可以使用retryCount+1调用该方法,但当您到达(例如10)时,将引发异常以避免无限错误 在发送中处理它
似乎保留重试方法中包含的重试逻辑是可取的。这假定要发送的初始retryCount参数是要尝试的最大重试次数
public void retry(int retryCount) throws MessageGatewayException {
while (retryCount-- > 0 && !restartConnection());
}
并将布尔结果添加到restartConnection:
在本例中,您的发送方法保持不变。似乎希望保留重试方法中包含的重试逻辑。这假定要发送的初始retryCount参数是要尝试的最大重试次数
public void retry(int retryCount) throws MessageGatewayException {
while (retryCount-- > 0 && !restartConnection());
}
并将布尔结果添加到restartConnection:
在本例中,您的发送方法没有改变。当您达到错误的10倍时,您希望如何处理它、记录和打印?这是停止异常传播的方法当你达到10倍的错误时,你想如何处理它,记录,打印?这是停止异常传播的方法。第一个解决方案将解决这个问题,但我很好奇这是否是常规的做法。我对异常使用try/catch块还很陌生。第一个解决方案将解决这个问题,但我很好奇这是否是常规的做法。对于异常使用try/catch块,我还是个新手。。
public void retry(int retryCount) throws MessageGatewayException {
while (retryCount-- > 0 && !restartConnection());
}
public boolean restartConnection() {
try {
init();
return true;
} catch (JMSException e) {
return false;
}
}