LoginSignup
1
0

More than 5 years have passed since last update.

可変長引数を取るメソッドのように使えるが、引数の個数を制限する。

Posted at

・使う側からしたらシグニチャの違いに気づかない
・引数の個数を強制できる(コンパイルが通らない)
ので、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;
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0