【问题标题】:Convert Queue<Deque<String>> into Object[][] in Java在 Java 中将 Queue<Deque<String>> 转换为 Object[][]
【发布时间】:2016-02-08 15:18:28
【问题描述】:

我正在使用 @DataProvider annotation for TestNG 构建动态测试。在Java中,如何将定义为Queue&lt;Deque&lt;String&gt;&gt; queueOfDeques = ArrayDeque&lt;Deque&lt;String&gt;&gt;();的数据结构转换为Object[][]?基于this explanation,我尝试了这个:

@DataProvider( name = "providedQueue" )
public static Object[][] dataForTest(){
        return new Object[][]{{SomeClass.GetQueueOfDeques}};
    }

其中GetQueueOfDeques 方法返回上面定义的queueOfDeques 数据结构。我不知道我做错了什么,但它没有按应有的方式转换变量,因此 TestNG 忽略了参数化测试。

java.lang.ClassCastException:com.company.product.migrationtester.ArrayDeque 无法转换为 java.lang.String

【问题讨论】:

  • 我知道这不关我的事...但是您为什么要降级为 Object[][] 集合?之后您仍然需要重新投射其内容才能访问元素方法:/
  • @DiegoMartinoia 这是@DataProvider 适用的返回类型。

标签: java casting queue testng


【解决方案1】:

只需迭代即可:

static Object[][] convert(Collection<? extends Collection<?>> cc) {
    Object[][] res = new Object[cc.size()][]; 
    int i = 0;
    for (Collection<?> c : cc)
        res[i++] = c.toArray();
    return res;
}

这样,您可以获得将任何类型(如&lt;?&gt; 所指)的任何集合(它们可能是QueueDequeList 和许多其他集合)转换为Object[][] 数组的通用方法。

【讨论】:

  • 我将res[i++] = c.toArray(); 更改为res[i++] = Object[ ] {c} 并且运行良好。这么多@sasha-salauyou
猜你喜欢
  • 2013-01-24
  • 2013-06-16
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
相关资源
最近更新 更多