0

考虑一个常见的验证函数。

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;
    }
}

在这里,如果通过了“a”,则验证确保矩阵适合乘法,如果通过了 m,则它适合加法。但是,我可以在这段代码中看到几个漏洞,例如: 1. 客户端需要知道作为参数传递的内容 2. 客户端可能会传入错误的字符。全局常量或枚举是我可能的解决方案。有没有更好/更常见的方法来解决这个问题?谢谢,

4

2 回答 2

3

枚举将比全局常量好得多,因为使用全局常量仍然很容易传递错误的值。我假设你的值是ints,所以用户可以传入任何int. 枚举会为你做类型检查,所以这是一个加号。

但是,您为什么不将其重构为 2 种不同的方法:checkMultvs checkAdd?这些正在做完全不同的检查,所以没有理由(据我所知)它们不应该是不同的方法。

于 2013-07-06T00:24:24.520 回答
1

不要编写一种方法来检查两个完全不同的事物。这应该是两种方法,一种用于乘法,一种用于加法。

于 2013-07-06T00:24:34.400 回答