将数组添加到ConcurrentLinkedQueue

时间:2016-02-05 16:48:37

标签: scala

我正在尝试在Scala 2.11中向ConcurrentLinkedQueue (collectedData)添加数组:

stream.foreachRDD { rdd => Collections.addAll(collectedData, rdd.collect()) }

我收到以下编译错误:

[error]  found   : java.util.concurrent.ConcurrentLinkedQueue[(String, String)]
[error]  required: java.util.Collection[_ >: java.io.Serializable]
[error] Note: (String, String) <: Any, but Java-defined trait Collection is invariant in type E.
[error] You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
[error]     stream.foreachRDD { rdd => Collections.addAll(allReceived, rdd.collect()) }

有人可以告诉我这些错误的含义吗?

2 个答案:

答案 0 :(得分:0)

您的信息流的类型是什么?

错误消息告诉您,您有一个字符串元组的集合。 但是您需要一个集合,您可以在其中插入Serializable实例。 这通常意味着某个类型被推断为您不想要的。

您是否明确声明了流的类型? 如果没有,尝试这样做,可能你会在某处出现类型错误,真正的问题是。

答案 1 :(得分:0)

你可以使用带有splat语法的Arrays.asList以及ConcurrentLinkedQueues添加所有方法:

read(socket_filedes, buffer, MAXSZ); /* stop if delimiter '>' is detected */