2

我正在尝试使用 .toArray() 从 LinkedBlockingQueue 复制到 dataStuff[] 数据数组,但出现异常

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LdataStuff;
    at Main.main(Main.java:30)

使用以下代码

public static BlockingQueue<dataStuff> recurseFragments = new LinkedBlockingQueue<dataStuff>();

    public static void main(String args[]) throws IOException
    {
        dataStuff[] data = (dataStuff[]) recurseFragments.toArray();
    }

我知道它在将 recurseFragments 吐入数组之前将其放入 object[] 中,但是为什么强制转换不起作用,我该如何解决这个问题?

4

3 回答 3

2

尝试使用其他 toArray 方法

dataStuff[] data = recurseFragments.toArray(new datastuff[0]);
于 2013-04-19T19:24:02.247 回答
1

尝试这个:

dataStuff[] data = recurseFragments.toArray(new dataStuff[0])

使用 toArray 的这个签名,您可以获得正确的返回类型。

于 2013-04-19T19:25:36.547 回答
1

因为toArray()返回一个Object[]

Object[] toArray();

所以,你应该 toArray(T[] a)改用。

<T> T[] toArray(T[] a);

以这种方式使用它:

recurseFragments.toArray(new datastuff[0]);
于 2013-04-19T19:28:18.700 回答