018 オブジェクト指向の深化(ジェネリクスとワイルドカード) 016 解答例

import java.util.Collection;

public class GenericExample {
    // ワイルドカードを使用したジェネリクスメソッド
    public static void printElements(Collection<?> collection) {
        for (Object element : collection) {
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        // 整数型のリスト
        List<Integer> integerList = new ArrayList<>();
        integerList.add(1);
        integerList.add(2);
        integerList.add(3);

        // 文字列型のリスト
        List<String> stringList = new ArrayList<>();
        stringList.add("One");
        stringList.add("Two");
        stringList.add("Three");

        // 任意の型のセット
        Set<Double> doubleSet = new HashSet<>();
        doubleSet.add(1.1);
        doubleSet.add(2.2);
        doubleSet.add(3.3);

        // ワイルドカードを使用したメソッドを呼び出して要素を出力
        printElements(integerList);
        printElements(stringList);
        printElements(doubleSet);
    }
}

この例では、printElements メソッドがワイルドカードを使用して任意のジェネリクスコレクションを受け取り、要素を順番に出力します。main メソッドでは、整数型のリスト、文字列型のリスト、および任意の型のセットの要素を printElements メソッドを使用してそれぞれ出力しています。

ワイルドカード

ワイルドカード(Wildcards)は、Javaにおいてジェネリクスを使用する際に、型の柔軟性を提供するための特殊な機能です。主に3つの種類があります:、、。

<?>(非境界ワイルドカード):

未知の型にマッチします。
例えば、Listはどんな型の要素でも受け入れることができます。
メソッドの引数に使われることがあり、任意の型のコレクションを受け入れる柔軟性を提供します。

public static void printElements(Collection<?> collection) {
    for (Object element : collection) {
        System.out.println(element);
    }
}

<? extends T>(上限境界ワイルドカード):

T または T のサブクラスにマッチします。
例えば、ListはNumberまたはそのサブクラスの要素を受け入れます。
読み取り専用の場合に使用されることがあります。

public static double sum(List<? extends Number> numbers) {
    double total = 0.0;
    for (Number number : numbers) {
        total += number.doubleValue();
    }
    return total;
}


<? super T>(下限境界ワイルドカード):

T または T のスーパークラスにマッチします。
例えば、ListはIntegerまたはそのスーパークラスの要素を受け入れます。
書き込み専用の場合に使用されることがあります。

public static void addNumbers(List<? super Integer> numbers) {
    numbers.add(1);
    numbers.add(2);
    numbers.add(3);
}

ワイルドカードを使用することで、ジェネリクスのコードがより柔軟になり、異なる型のコレクションを同じメソッドで扱えるようになります。

「018 オブジェクト指向の深化」問題集リスト