Итак, я пытаюсь вызвать тестер JUnit Parameterized
для загрузки отдельных типов объектов общего назначения. Конкретные классы, которые будут использоваться, известны классам-потомкам.
Изначально мне удалось получить метод, который возвращает Collection<T>
для работы с JUnit, но затем я понял, что JUnit действительно требует Collection<T[]>
- у меня возникают проблемы при создании этого массива из-за нежелания / отказа Java создавать массивы дженериков.
protected static <T> Collection<T> someMethod(Class<T> someClass)
{
Collection<T> result = new ArrayList<T>();
T someBean;
while (someCondition(...))
{
//Do some stuff to compute someBean
result.add(someBean);
}
return result;
}
Теперь JUnit требует Collection<T[]>
, например:
// (descendant class)
@Parameters
public static Collection<SomeActualClass[]> data()
{
return someMethod(SomeActualClass.class);
}
Итак, я хочу изменить тип возвращаемого значения, выполнив что-то вроде:
protected static <T> Collection<T[]> someMethod(Class<T> someClass)
{
Collection<T[]> result = new ArrayList<T>();
T someBean;
while (someCondition(...))
{
//Do some stuff to compute someBean
result.add(new T[]{someBean});
}
return result;
}
К сожалению, Java не позволит мне сделать это, потому что вы не можете создавать универсальные массивы.
У меня возникает соблазн поставить заявление как result.add((T[])new Object[]{someBean});
но безопасно ли это? или есть лучший способ?