・使う側からしたらシグニチャの違いに気づかない
・引数の個数を強制できる(コンパイルが通らない)
ので、addAllNumOfArgsRestrictedのほうが優れている気がする。
しかし、引数を「全部足す」なのに、足される数が1つの配列になってないのは気持ち悪い。
どっちがいいんだろ。
AddTest.java
package com.example.javamisc.variableargs;
import static org.junit.Assert.*;
import org.junit.Test;
import static com.example.javamisc.variableargs.Add.addAll;
import static com.example.javamisc.variableargs.Add.addAllNumOfArgsRestricted;
public class AddTest {
@Test
public void addAll可変長引数版() {
assertEquals(3, addAll(1, 2));
try {
assertEquals(1, addAll(1));
fail();
} catch (IllegalArgumentException e) {
}
}
@Test
public void addAll引数の個数制限版() {
assertEquals(3, addAllNumOfArgsRestricted(1, 2));
// assertEquals(1, addAllNumOfArgsRestricted(1));
// ↑コンパイルエラー
}
}
Add.java
package com.example.javamisc.variableargs;
public class Add {
public static final int addAll(int... nums) {
if (nums == null) {
throw new NullPointerException();
}
if (nums.length < 2) {
// add a to bなので。
throw new IllegalArgumentException();
}
int sum = 0;
for (int i : nums) {
sum += i;
}
return sum;
}
public static final int addAllNumOfArgsRestricted(int a, int b, int... nums) {
if (nums == null) {
throw new NullPointerException();
}
int sum = a + b;
for (int i : nums) {
sum += i;
}
return sum;
}
}