[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