相关疑难解决方法(0)

Java风格:正确处理异常

从概念上讲,我一直在决定我的项目的异常处理结构.

假设你有一个例子:

public abstract class Data {
   public abstract String read();
}
Run Code Online (Sandbox Code Playgroud)

还有两个子类FileData,它从一些指定的文件读取你的数据,而StaticData,它只返回一些预定义的常量数据.

现在,在读取文件时,可能会在FileData中抛出IOException,但StaticData将永远不会抛出.大多数样式指南建议将Exception传播到调用堆栈,直到有足够的上下文可用于有效处理它.

但我真的不想在抽象的read()方法中添加throws子句.为什么?因为Data和使用它的复杂机器对文件一无所知,所以它只知道数据.此外,可能还有其他数据子类(以及更多这些子类)从不抛出异常并完美地传递数据.

另一方面,IOException是必要的,因为如果磁盘不可读(或某些此类),则必须抛出错误.所以我看到的唯一出路就是捕获IOException并在其位置抛出一些RuntimeException.

这是正确的哲学吗?

java exception

17
推荐指数
2
解决办法
8379
查看次数

异常处理模式

这是我看到的常见模式,其中与异常关联的错误代码存储为静态最终整数.当创建要抛出的异常时,它将使用这些代码之一以及错误消息构造.这导致该方法要抓住它必须查看代码然后决定一个行动方案.

替代似乎是 - 为每个异常错误情况声明一个类(尽管相关的异常将从一个公共基类中解除)

有中间地带吗?推荐的方法是什么?

java enums design-patterns exception

11
推荐指数
3
解决办法
9541
查看次数

如何在不抛出异常的情况下执行此操作?

我对Java很新,而且我试图了解异常以及什么时候应该使用它们.我一直在使用它们作为错误检查的一种形式,但我遇到过几个人说异常应该仅用于程序控制之外的事情,例如用户错误.

我有一个函数,对于2维的给定行,计算xMin和xMax之间的所有y值.如果直线是垂直的,则此函数会抛出异常,因为无法计算垂直线上y的所有值.在两个y值之间存在等效函数查找点,如果该行是水平的,则会引发错误.

findPointsInRangeOfX (int xMin, int xMax) throws LineIsVerticalException {
    // check if line is vertical
    // if vertical, throw an exception
    // else calculate the y values for each integer between xMin and xMax
    // return y values
}
Run Code Online (Sandbox Code Playgroud)

我将此函数称为查找给定窗口中某一行上所有点的一部分,由最小和最大x和y值给出.我不检查此功能中的线是否垂直; 相反,我依靠findPointsInRangeOfX中的检查并在方法周围使用try和catch块.

pointsInWindow (int xMin, int xMax, int yMin, int yMax) {
    try {
        // Find list of all the points between xMin and xMax.
        // Remove from list all points not between yMin and yMax
    }
    catch (LineIsVerticalException e) …
Run Code Online (Sandbox Code Playgroud)

java exception-handling

0
推荐指数
1
解决办法
138
查看次数