больше для полноты, чем все остальное ...
Вы могли бы написать метод, чтобы сделать это с помощью reflection:
static <A,B> void addAll(Collection<B> dest, Collection<A> source, String methodName)
throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
{
for (A a: source)
{
// can optimize this to only get method once if all objects have same type
Method m = a.getClass().getMethod(methodName);
dest.add((B)m.invoke(a));
}
}
Usage/пример:
ArrayList<String> s = new ArrayList<String>();
List<Integer> i = Arrays.asList(1,2,3);
addAll(s, i, "toString");
System.out.println(s);
Вы также можете добавить параметры метода, если хотите.
Test.
Почему я >> НЕ < < рекомендовать его:
Если метания 3 исключения не вы беспокоитесь еще ... (конечно, вы можете try
- catch
, а во избежание исключения вообще)
несколько точек (человека) отказа: (все они будут отображаться как ошибки во время выполнения, но время компиляции предпочтительными являются ошибки)
- метод п АМА орфографическая ошибки
- метод даже не существует
- Метод не возвращает объект типа
B
Если что-то подобное существовало, было бы в JavaDocs, и это не :(. Поэтому, к сожалению, вы застряли в том, что делаете сейчас, если не хотите взять комментарий Дукелинга об отражении. – greedybuddha