/** * 指定された型にキャスト可能なフィールドを集める. * * @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); }
こういったことをやる必要があったのですよ.