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 に答える