今日のコード(2)

/**
 * 指定された型にキャスト可能なフィールドを集める.
 * 
 * @param klass
 *            結果として返してほしい型のClass
 * 
 * @return 集まったフィールドの配列
 */
private <T> T[] collectFields(Class<T> klass) {
    List<T> objs = new ArrayList<T>();
    for (Field f : getClass().getDeclaredFields()) {
        if (klass.isAssignableFrom(f.getType())) {
            f.setAccessible(true);
            try {
                Object obj = f.get(this);
                objs.add((T) obj);
            } catch (IllegalAccessException e) {
            }
        }
    }
    
    T[] ret = (T[]) Array.newInstance(klass, objs.size());
    return objs.toArray(ret);
}

こういったことをやる必要があったのですよ.