我正在使用 Socket API 制作一个简单的应用程序,但遇到了一个小问题,我还没有找到答案。
应用程序应该是多线程的,以便 main 方法同时启动服务器和客户端线程。
public class UDPClientServer1 extends Thread
但是,由于 Socket 类需要抛出一些特定的异常,所以我也必须这样做:
public void runClient() throws SocketException, UnknownHostException, IOException
对于 runServer() 方法也类似。
这并不是说有什么问题,但是有没有更优雅的解决方案?类似于:
public class UDPClientServer1 extends Thread, throws Exception
最佳答案
理想情况下,您可能希望包装抛出的异常,如果错误不可恢复,则将其转换为 RuntimeException
,或者至少是更合适/封装的异常。
例如
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 时,您不必在方法签名中声明它,并且调用代码不需要显式处理它(尽管应该在某个时刻处理它)。
关于java - 在扩展类上添加 'throws' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17599460/