4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sourceforge.mikutoga.corelib;
10 import java.lang.reflect.Constructor;
11 import java.lang.reflect.InvocationTargetException;
12 import java.util.List;
17 public final class ListUtil {
24 throw new AssertionError();
28 * リストの出現順にシリアルナンバーを割り振る。
32 public static void assignIndexedSerial(
33 List<? extends SerialNumbered> list){
35 for(SerialNumbered numbered : list){
36 numbered.setSerialNumber(serial);
45 * 追加された要素にはnullが収められる。
46 * リストがすでに指定サイズ以上の要素数を持つ場合、何もしない。
51 public static <E> void extendList(List<E> list, int newSize){
52 int remain = newSize - list.size();
53 if(remain <= 0) return;
55 for(int ct = 1; ct <= remain; ct++){
59 assert list.size() == newSize;
65 * リストのnull要素をデフォルトコンストラクタによるインスタンスで埋める。
72 public static <E> int fillDefCons(List<E> list,
73 Constructor<? extends E> cons){
76 int size = list.size();
77 for(int pt = 0; pt < size; pt++){
78 E elem = list.get(pt);
79 if(elem != null) continue;
82 elem = cons.newInstance();
83 }catch(InstantiationException e){
85 throw new AssertionError(e);
86 }catch(IllegalAccessException e){
88 throw new AssertionError(e);
89 }catch(InvocationTargetException e){
90 Throwable cause = e.getTargetException();
91 if(cause instanceof RuntimeException){
92 throw (RuntimeException) cause;
94 if(cause instanceof Error){
98 throw new AssertionError(e);
109 * リストのnull要素をデフォルトコンストラクタによるインスタンスで埋める。
112 * @param klass デフォルトコンストラクタの属するクラス
115 public static <E> int fillDefCons(List<E> list, Class<? extends E> klass){
116 Constructor<? extends E> cons;
118 cons = klass.getConstructor();
119 }catch(NoSuchMethodException e){
121 throw new AssertionError(e);
124 return fillDefCons(list, cons);
128 * リスト要素数の拡張とデフォルトコンストラクタによる要素埋めを行う。
129 * 追加された要素および既存のnull要素には
130 * デフォルトコンストラクタによるインスタンスが収められる。
133 * @param klass デフォルトコンストラクタの属するクラス
134 * @param newSize 新サイズ
137 public static <E> int prepareDefConsList(List<E> list,
138 Class<? extends E> klass,
140 extendList(list, newSize);
141 int result = fillDefCons(list, klass);