import java.util.List;
public class NumericSum {
public static <T extends Number> double sumOfList(List<T> list) {
double sum = 0.0;
for (T element : list) {
sum += element.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> integerList = List.of(1, 2, 3, 4, 5);
List<Double> doubleList = List.of(1.1, 2.2, 3.3, 4.4, 5.5);
double sumOfIntegers = sumOfList(integerList);
double sumOfDoubles = sumOfList(doubleList);
System.out.println("Sum of integers: " + sumOfIntegers);
System.out.println("Sum of doubles: " + sumOfDoubles);
}
}
この例では、sumOfList
メソッドがジェネリクス型パラメータ T
を数値型に制約しています。また、Number
クラスのメソッド doubleValue()
を使用して各要素を double
型に変換しています。これにより、整数型のリストやダブル型のリストなど、様々な数値型のリストに対応できます。
ワイルドカードの上限
ワイルドカードの上限(Upper Bounded Wildcard)は、ジェネリクスにおいて特定の型のサブタイプに制限をかけるために使用されます。ワイルドカードの上限は extends
キーワードを使用して指定します。具体的なクラスまたはインターフェースの型の上限を指定することで、その型およびそのサブタイプのみがワイルドカードに適用可能となります。
例えば、以下はワイルドカードの上限を使用したメソッドの例です。
import java.util.List;
public class UpperBoundedWildcard {
// ワイルドカードの上限を使用したメソッド
public static double sumOfList(List<? extends Number> list) {
double sum = 0.0;
for (Number number : list) {
sum += number.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> integerList = List.of(1, 2, 3, 4, 5);
List<Double> doubleList = List.of(1.1, 2.2, 3.3, 4.4, 5.5);
// ワイルドカードの上限を使用したメソッド呼び出し
double sumOfIntegers = sumOfList(integerList);
double sumOfDoubles = sumOfList(doubleList);
System.out.println("Sum of integers: " + sumOfIntegers);
System.out.println("Sum of doubles: " + sumOfDoubles);
}
}
この例では、List<? extends Number>
を使用して、Number
クラスを継承するどの型でも引数として受け取ることができる sumOfList
メソッドがあります。これにより、Integer
や Double
などの Number
クラスのサブタイプを含むリストが渡されることができます。
ワイルドカードの上限を利用することで、より柔軟かつ汎用性の高いジェネリクスの使用が可能となります。上限を指定することで、特定の型およびそのサブタイプを受け入れるメソッドやクラスを設計することができ、これによりコードの再利用性が向上します。また、メソッドやクラスが異なる型に対しても動作するようになり、より拡張可能なコードを書くことができます。
ワイルドカードの上限を使用する際には、コードの柔軟性を保ちつつ型安全性を確保することが重要です。特定の型に依存する部分と、より一般的な操作を提供する部分とをうまくバランスさせることで、コードの保守性や可読性を高めることができます。ジェネリクスの上限を理解し、適切に利用することで、より安全で効率的なプログラミングが可能です。