我们可以用“引发新异常”代替“返回”吗?

时间:2019-05-28 11:22:56

标签: java exception return

我正在尝试编写一个矩阵计算器进行分解。但是,在矩阵计算器中有些情况下,我不希望系统返回任何内容,而只是打印出一条错误消息。

我试图通过用throw新的Exception方法替换return调用来做到这一点,但是它显然似乎不起作用,因为:1.需要实现某种类型的catch / throws和2。仍然需要一个return语句。

public double[][] multiply(Matrix other) {
  if(getCols() == other.getRows()) {
     double[][] mult = new double[getRows()][other.getCols()];

     for(int r = 0; r < mult.length; r++) {
        for(int c = 0; c < mult[0].length; c++) {
           mult[r][c] = mult(m1[r],findCol(other,c));
        }
     }

     return mult;
  }

  else {
     throw new MatrixException("Multiply");     
  }

}

else语句可以看出,它代替了return语句,而被throw new MatrixException("Multiply")取代。这仅返回String语句,但是代码不会编译。有什么方法可以使用try-catch方法引发异常而无需实现返回吗?另外,是的,这是我第一次问问题,所以我仍然对问题格式化技术并不完全熟悉。

1 个答案:

答案 0 :(得分:3)

您可以通知multiply的调用方,可以通过更改如下方法来引发异常:

public double[][] multiply(Matrix other) throws MatrixException {}

所以现在的方法是:

public double[][] multiply(Matrix other) throws MatrixException {  // tells the method throws an exception
    if(getCols() == other.getRows()) {
        // ...
        return <your_valid_return_here>
    }
    throw new MatrixException("Multiply");  // inform the caller there is an exception if the previous condition is not met
}

此外,请记住MatrixException是什么类型的异常(选中或未选中),以便遵循此方法。如果选中,则将强制调用方在调用代码中对其进行处理(或报告其代码可能引发异常),而不进行检查的情况将不是这样。

其他阅读内容: