Ваша проблема в том, что нет гарантии, что тип, возвращаемый getChildren (), соответствует типу аргумента varargs вашему методу bornContainer. Так что компилятор вправе жаловаться на это. Использование промежуточной локальной переменной действительно превращает ошибку компилятора в потенциальную проблему времени выполнения.
Мне кажется, что ваш "контейнер" действительно должен быть универсальным классом, потому что его поведение зависит от типа, который находится в списке, который возвращает getChildren (). Посмотрите на мою переписать ваш пример. Это не имеет ошибок компиляции или предупреждений.
public interface Containter<Z extends ModelElement> extends ModelElement{
List<Z> getChildren();
}
public class MockMama {
public static <Y extends ModelElement, T extends Containter<Y>> T bornContainer( Class<T> clazz, Y ... children) {
T container = mock(clazz);
when(container.getChildren()).thenReturn( Arrays.asList(children));
return container;
}
}
Надеюсь, это поможет.