LoginSignup
1
0

【JavaGold】下限境界ワイルドカード

Last updated at Posted at 2023-07-05

概要

型パラメータとして受け取れる最も具体的な型(下限)を制限し、それ以上の型であれば扱うことができる

下限境界ワイルドカードの表記は ? super Type である。ここで、Typeは特定のクラス名やインターフェース名が入る。

上記のような型パラメータを与えると、非変であるジェネリクスの制限を緩和し、Typeに指定したクラスもしくはより上位の型であれば型パラメータとして受け取ることができる。

public void processElements(List<? super Integer> list) {
    // Integerクラスまたはそのスーパータイプのリストを処理する
    // 要素の追加も可能
    list.add(42);
    for (Object element : list) {
        // 要素の処理
    }
}

上記の例では、List<? super Integer> 型の引数を受け取る processElements メソッドがある。これは、Integer クラスまたはそのスーパータイプのリストを処理することができる。また、list に対して新しい Integer オブジェクトを追加することも可能である。

下限境界ワイルドカードは、特定のクラスのスーパータイプの柔軟な処理や、書き込み可能な操作を行う場合に有用である。

特徴

引数の型

上限境界ワイルドカードの場合、戻り値には任意の型を使うことができるが、引数にはnullリテラルしか渡せない。
しかし、下限境界ワイルドカードであれば、引数の型に任意の型を使うことができる。

戻り値の型

一方で、戻り値の型はObject型に限定される。
(取り出す時にフィールドにどの型の参照が入っているかわからないため、最も安全な全てのクラスであるObject型にしている)

ワイルドカードのまとめ

以下3つのワイルドカードについて簡単にまとめる。

  • 上限境界ワイルドカード
    特定のクラス、サブクラスを制約する。
  • 非境界ワイルドカード
    任意の型を受け入れる柔軟性を持つ。
  • 下限境界ワイルドカード
    特定のクラス、スーパークラスを制約する。

これらのワイルドカードは、Javaのジェネリクスにおいて型の柔軟性を提供し、異なる型の互換性や再利用性を向上させるために使用される。

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