所以我试图Parameterized
在加载单个泛型类型对象时调用 JUnit 测试运行程序。要使用的特定类对于后代类是已知的。
最初我设法获得了一个方法,它返回一个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});
但这安全吗?或者,还有更好的方法?