在以下场景中,
public void fooMethod()
{
try
{
methodToCall();
}catch( FooException exception )
{
methodToCall();
}
}
private int methodToCall() throws FooException
{
throw new FooException();
}
我想调用methodToCall
(例如)10次尝试成功。
由于catch块中没有异常被捕获,并且在上面给出的示例中,methodToCall总共被调用两次(一个在try块中,一个在catch块中。)
我应该如何设计代码,以便methodToCall
被调用10次,即使它抛出给定的异常。
实际的fooMethod比这复杂得多,我不能递归地调用它,因为其他几个作业都比这个try-catch子句之前完成。
答案 0 :(得分:1)
public void fooMethod()
{
int counter = 0 ;
while(counter < 10){
try
{
methodToCall();
counter = 11;
}catch( FooException exception )
{
counter++;
}
}
}
答案 1 :(得分:1)
for循环将确保进行10次调用。 try catch将阻止退出循环。
public void run10TimesWhatsoever() {
for(int i = 0; i < 10; ++i) {
try {
methodToCall();
} catch (final FooException ignore) {
}
}
}
但是,如果你想在MOST打10次并在成功时停止,你可以使用类似的东西
public void attemptUpTo10Times() {
for(int i = 0; i < 10; ++i) {
try {
methodToCall();
break; // exit the loop if no exception were thrown
} catch (final FooException ignore) {
if (i == 9) {
throw new IllegalStateException("Failed 10 times in a row");
}
}
}
}