从LinkedBlockingQueue<>放置数据到不是object类型的数组

时间:2013-04-19 19:19:51

标签: java exception casting classcastexception toarray

我正在尝试使用.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放入一个对象[],然后再将它放入数组中,但为什么转换不起作用?如何解决?

3 个答案:

答案 0 :(得分:2)

尝试使用other toArray method

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

答案 1 :(得分:1)

试试这个:

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

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

答案 2 :(得分:1)

因为toArray()会返回Object[]

Object[] toArray();

因此,您应该使用toArray(T[] a)代替。

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

以这种方式使用:

recurseFragments.toArray(new datastuff[0]);