在扩展类上添加'throws'?

时间:2013-07-11 17:10:33

标签: java extends throws

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

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

public class UDPClientServer1 extends Thread

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

public void runClient() throws SocketException, UnknownHostException, IOException

,类似于runServer()方法。

并不是说这有什么不妥,但有更优雅的解决方案吗?有点像:

public class UDPClientServer1 extends Thread, throws Exception

1 个答案:

答案 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时,您不必在方法签名中声明它,并且调用代码不需要显式处理它(尽管它应该在某个时候处理)。