Generics
generics: ? extends Number で数値型を受け取る
上限境界ワイルドカードで、Number の各サブタイプを読み取れます。
SourceNumberTotals.java
Java 21
package examples.generics;
import java.util.List;
public final class NumberTotals {
private NumberTotals() {}
public static double sum(List<? extends Number> values) {
return values.stream().mapToDouble(Number::doubleValue).sum();
}
}TestNumberTotalsTest.java
Java 21
package examples.generics;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.List;
import org.junit.jupiter.api.Test;
class NumberTotalsTest {
@Test
void IntegerのListをNumberとして合計できる() {
assertEquals(6.0, NumberTotals.sum(List.of(1, 2, 3)));
}
@Test
void DoubleのListも同じメソッドで合計できる() {
assertEquals(3.5, NumberTotals.sum(List.of(1.0, 2.5)));
}
}01Assertion
このテストで確認できること
- Integer の List を合計できる
- Double の List も同じメソッドで合計できる
? extends Number は Number のサブタイプを読み取るための境界です。要素の追加には使いません。
OBSERVED RESULT
expected: sum([1, 2]) → 3.0
actual: 3.0