java - 在扩展类上添加 'throws' ?

标签 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

最佳答案

理想情况下,您可能希望包装抛出的异常,如果错误不可恢复,则将其转换为 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/

相关文章:

java使用关系

java - Java 可以自动包装一个对象并作为抛出异常的一部分抛出吗?

java - 有异常的接口(interface)扩展无异常的接口(interface)

java - 同时按下鼠标按钮无法正常工作

java - (Has-A vs. Is-A) 如何布局我的程序架构? (Java)

java - 多节点环境(集群),如何确保一个 Action 在启动时只执行一次?

java - 是否可以在 Java 中扩展最终类?

java - 方法重载和抛出异常处理

java - Guava 库和 GWT

java - 如何在 Spring MVC 3 中使用 Servlet 3 @WebServlet 和异步?