LoginSignup
0
0

Javaの境界ワイルドカードについて

Posted at

はじめに

Javaの境界ワイルドカードについてまとめてみた。
主に3つの形式がある。
・非境界ワイルドカード
・上限境界ワイルドカード
・下限境界ワイルドカード

非境界ワイルドカード

<?>のようにジェネリクス宣言時にワイルドカード「?」を使用することで型パラメータとして使用できるクラスを制限せずに扱うことができる。主に2つの特徴がある。
・メソッドの戻り値の型はObject型になる。
・メソッドの引数にはnullリテラルのみ渡せる。

Main.java
public class Main {
    public static void main(String[] args) throws Exception {
        // 非境界ワイルドカードを使用しリストを宣言
        ArrayList<?> list = new ArrayList<>();

        ArrayList<String> strList = new ArrayList<>();

        ArrayList<Integer> intList = new ArrayList<>();
        
        list.containsAll(strList);
        list.containsAll(intList);
    }
}

上限境界ワイルドカード

<? extends T>のようにジェネリクス宣言時に「extends」を使い、型パラメータとして使用できるクラスの範囲を制限する仕組みである。
<? extends T>の場合、TまたはTのサブクラス型のみ扱うことができる。
・メソッドの戻り値は任意の型にすることができる。
・メソッドの引数にはnullリテラルのみ渡せる。

Main.java
public class Main {
    public static void main(String[] args) throws Exception {
        
        ArrayList<Integer> intList = new ArrayList<>();
        
        ArrayList<String> strList = new ArrayList<>();

        // IntegerはNumberのサブクラスのため呼び出すことができる
        testList(intList);
        // StringはNumberのサブクラスではないためコンパイルエラー
        testList(strList);
    }

    // 上限境界ワイルドカードを使用したメソッド    
    public static void testList(List<? extends Number> list) {
        // listに関する処理
    }
}

下限境界ワイルドカード

<? super T>のようにジェネリクス宣言時に「super」を使い、型パラメータとして使用できるクラスの範囲を制限する仕組みである。
<? super T>の場合、TまたはTのスーパークラス型のみ扱うことができる。
・メソッドの戻り値の型はObject型になる。
・メソッドの引数には任意の型を渡せる。

Main.java
public class Main {
    public static void main(String[] args) throws Exception {
        
        ArrayList<Number> numList = new ArrayList<>();
        
        ArrayList<String> strList = new ArrayList<>();

        // NumberはIntegerのスーパークラスのため呼び出すことができる
        testList(numList);
        // StringはIntegerのスーパークラスではないためコンパイルエラー
        testList(strList);
    }

    // 下限境界ワイルドカードを使用したメソッド    
    public static void testList(List<? super Integer> list) {
        // listに関する処理
    }
}
0
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
0
0