我有一个使用代理从服务器检索信息的方法。有时由于代理不当,我会收到SocketException
,SSLException
,SSLHandshakeException
或ConnectException
我希望该方法重试上面的异常,但是在IOException上或者没有异常我希望返回一个字符串
这是我为测试不同场景而构建的方法
public String getTest(int i, int current, int total)
{
String text = "";
try
{
if (i == 1)
throw new IOException();
else if (i == 2)
throw new SSLException("SSLEx");
else if (i == 3)
throw new SocketException();
else
text = "EVERYTHING GOOD";
}
catch (SSLException | SocketException re)
{
if (current < total)
{
System.out.println("Recalling " + current);
getTest(1, ++current, total);
}
}
catch (IOException ioe)
{
text = "HTTP ERROR";
}
catch (Exception e)
{
e.printStackTrace();
}
return text;
}
我通过
调用我的测试方法System.out.println(c.getTest(3, 0, 5));
最初程序会捕获SocketException
,然后通过传递1重试,这样我就可以模拟一个工作代理,但是IOException
的服务器响应为i = 1
,但该方法永远不会返回文本& #34; HTTP错误&#34;
为了使其按预期工作,我需要更改什么?
答案 0 :(得分:3)
为了返回递归函数调用返回的字符串,必须在递归函数调用之前放置return
,如此...
return getTest(1, ++current, total);
现在您只需运行递归函数并丢弃其返回值。然后,您的逻辑将从初始调用返回text
字符串(在SSLException
的情况下,它看起来像一个空字符串)。
您也可以通过从递归函数中分配text
来实现相同的效果......
text = getTest(1, ++current, total);
考虑到其余逻辑,这两个陈述都是等价的。