我编写了以下代码,它首先验证一个矩阵,然后它会调用一个私有函数来添加它们,它验证是成功的。现在根据有效的 java 在私有函数中再次验证是一个很好的做法。但是,如果验证步骤本身很长,我们是否需要验证私有函数中的所有内容?如果不是那么在哪里画线?
private static void check(int[][] m1, int[][] m2, char op) {
if (m1 == null || m2 == null) {
throw new NullPointerException("No input matrix should be null.");
}
/**
* Switch case was thought to be beneficial in case of future extensibility.
* http://en.wikipedia.org/wiki/Switch_statement#Advantages_and_disadvantages
*/
switch (op) {
case 'a' : if (m1.length != m2.length && m1[0].length != m2[0].length) throw new IllegalArgumentException("bla bla"); else break;
case 'm' : if (m1[0].length != m2.length) throw new IllegalArgumentException("bla bla"); else break;
}
}
public static int[][] add (int[][] m1, int[][] m2) {
check (m1, m2, 'a');
return add(m1, m2, m1.length - 1, m1[0].length - 1);
}
private static int[][] add (int[][] m1, int[][] m2, int rows, int cols) {
assert m1 != null;
assert m2 != null;
// final can be returned check Arrays docjar line 2843.
final int[][] m = new int[rows + 1][cols + 1];
for (int i = 0; i <= rows ; i++) {
for (int j = 0; j <= cols; j++ ) {
m[i][j] = m1[i][j] + m2[i][j];
}
}
return m;
}
在这里,我只验证了矩阵是否为空.. 但如果我不验证传递的其他参数,那将毫无用处。再一次,这个问题是通用的,所以请不要建议代码改进。此代码仅作为一个更广泛问题的示例 - 在调用私有函数时要验证多少。谢谢,