一般的な検証関数を考えてみましょう。
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. クライアントは間違った文字を渡す可能性があります。グローバル定数または列挙型が私の可能な解決策です..この問題を解決するためのより良い/より一般的な方法はありますか? ありがとう、