我正在使用Socket API创建一个简单的应用程序,但遇到了一个我没有找到答案的小问题。
应用程序应该是多线程的,因此main方法启动服务器和客户端线程。
public class UDPClientServer1 extends Thread
但是,由于Socket类需要抛出一些特定的异常,我还必须这样做:
public void runClient() throws SocketException, UnknownHostException, IOException
,类似于runServer()方法。
并不是说这有什么不妥,但有更优雅的解决方案吗?有点像:
public class UDPClientServer1 extends Thread, throws Exception
答案 0 :(得分:1)
理想情况下,您可能希望包装抛出的异常,如果错误无法恢复,则将其转换为RuntimeException
,或至少更合适/封装的异常。
E.g。
public void runClient throws ClientException
{
try
{
// do something
} catch (Exception e)
{
log.error("Exception encountered in client",e);
throw new ClientException("Unrecoverable client exception encountered",e);
// or: throw new RuntimeException("Unrecoverable client exception",e);
}
}
上面的 ClientException
是您自己需要创建的异常。其目的是从任何调用代码封装相应异常的实现细节。
但是,如果调用代码没有合理的方式来响应异常,则使用RuntimeException
可能更合适。抛出RuntimeException时,您不必在方法签名中声明它,并且调用代码不需要显式处理它(尽管它应该在某个时候处理)。