Java 当要调用的函数使用开关盒状条件时,如何消除硬编码

Java 当要调用的函数使用开关盒状条件时,如何消除硬编码,java,software-design,Java,Software Design,考虑一个通用的验证函数 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 c

考虑一个通用的验证函数

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传递的内容。客户端可能传入错误的字符。全局常量或枚举是我可能的解决方案。。有没有更好/更常用的方法来解决这个问题?谢谢,

枚举将比全局常量好得多,因为使用全局常量仍然很容易传递坏值。我假设您的值是
int
s,因此用户可以传入任何
int
。Enum将为您执行类型检查,因此这是一个加号


但是,为什么不将其重构为两种不同的方法:
checkMult
vs
checkAdd
?它们执行完全不同的检查,因此没有理由(据我所知)它们不应该是不同的方法。

枚举将比全局常量好得多,因为使用全局常量仍然很容易传递坏值。我假设您的值是
int
s,因此用户可以传入任何
int
。Enum将为您执行类型检查,因此这是一个加号


但是,为什么不将其重构为两种不同的方法:
checkMult
vs
checkAdd
?它们执行完全不同的检查,因此没有理由(据我所知)它们不应该是不同的方法。

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

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

您对加法的检查不正确。应该使用“| |”而不是“&&&”。您也不需要
else
语句,因为它将
抛出
中断
。您对添加的检查不正确。应该使用“| |”而不是“&&”。您也不需要
else
语句,因为它将
抛出
中断