gpt4 book ai didi

java - 当要调用的函数使用类似 switch case 的条件时如何消除硬编码

转载 作者:行者123 更新时间:2023-12-01 18:46:43 26 4
gpt4 key购买 nike

考虑一个通用的验证函数。

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,因此用户可以传入任何 int。枚举将为您进行类型检查,所以这是一个优点。

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

关于java - 当要调用的函数使用类似 switch case 的条件时如何消除硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com