[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