[Java]境界ワイルドカード型を使ってジェネリックスメソッドを定義する

書式
1.private static <T> List<? super T> 関数w名(List<? super T> 変数1,
List<? extends T> 変数2,
List<? extends T> 変数3)
2.リストの定義
Integer型
List<Integer> intLst = new ArrayList<Integer>();
Double型
List<Double> dbLst = new ArrayList<Double>()
Number型
List<Number> nbLst = new ArrayList<Number>();

使用例

package com.arkgame.demo;

import java.util.ArrayList;
import java.util.List;

public class ListConatDemo {

      // Integer型リスト
      protected static List<Integer> intLst = new ArrayList<Integer>();
      
      // Double型リスト
      protected static List<Double> dbLst = new ArrayList<Double>();
      
      @SuppressWarnings("unchecked")
      public static void main(String[] args) {
            //Integer型リストに要素を追加
            intLst.add(123);
            intLst.add(456);
            
            //Double型リストに要素を追加
            dbLst.add(77.88);
            dbLst.add(99.00);

            // 連結結果Number型リスト
            List<Number> nbLst = new ArrayList<Number>();

            // 境界ワイルドカード型 パラメータ intLst dbLst
            nbLst = (List<Number>) testFunc(nbLst, intLst, dbLst);
            
            // リストの要素を出力
            for (Number nb : nbLst) {
                  System.out.print(nb + " ");
            }

      }
      /**
       * ジェネリックスメソッドを使ってリストを連結する関数
       * 下限境界ワイルドカード型(super) resC 
       * 上限境界ワイルドカード型(extends)
       * @param <T>
       * @param resC
       * @param cftA
       * @param cftB
       * @return
       */
      private static <T> List<? super T> testFunc(List<? super T> resC, 
                  List<? extends T> cftA, 
                  List<? extends T> cftB) {

            // リストresCの最後にリストAを追加
            resC.addAll(cftA);

            // リストresCの最後にリストBを追加
            resC.addAll(cftB);
            
            return resC;
      }

}

結果
123 456 77.88 99.0

Java

Posted by arkgame