2013-04-19 1 views
1

Я пытаюсь сделать копию из LinkedBlockingQueue в массив [] данных dataStuff с использованием .toArray(), но я получаю исключениеввод данных из LinkedBlockingQueue <> в массив не объект типа

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 в объект [], прежде чем он выплевывает его в массив, но почему это, что отливка не работает и как я могу решить эту проблему?

ответ

2

Try используя other toArray method

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

Благодаря этим работало – JohnM

1

Попробуйте это:

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

Используя эту подпись ToArray вы можете получить правильный тип возврата.

+0

Благодаря этим работало, но я принял ответ, который был размещен первым – JohnM

1

Поскольку toArray() возвращает Object[]

Object[] toArray(); 

Таким образом, вы должны использовать вместо toArray(T[] a).

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

Используйте это следующим образом:

recurseFragments.toArray(new datastuff[0]);