2

我正在使用 Socket API 制作一个简单的应用程序,但遇到了一个我还没有找到答案的小问题。

该应用程序应该是多线程的,因此 main 方法同时启动服务器和客户端线程。

public class UDPClientServer1 extends Thread

但是,由于 Socket 类需要抛出一些特定的异常,我也必须这样做:

public void runClient() throws SocketException, UnknownHostException, IOException

对于 runServer() 方法也是如此。

并不是说这有什么问题,而是有更优雅的解决方案吗?类似的东西:

public class UDPClientServer1 extends Thread, throws Exception
4

1 回答 1

2

理想情况下,您可能希望包装您抛出的异常,或者将其转换为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 时,您不必在方法签名中声明它,调用代码也不需要显式处理它(尽管它应该在某些时候处理)。

于 2013-07-11T17:22:59.927 回答