java.lang.ClassCastException: создание синхронизированного связанного списка

Мне нужен синхронизированный LinkedList с универсальным классом A, здесь соответствующие части:

public abstract class A<T extends B> implements Runnable {

А интерфейс для Б, где "настоящий" Б, будет супклассом

public interface B{

Следующая установка вызовет ошибку времени выполнения:

LinkedList<A<? extends B>> eopList = (LinkedList<A<? extends B>>) Collections
            .synchronizedCollection(new LinkedList<A<? extends B>>());

Я нашел следующее предложение, но оно также не будет компилироваться:

LinkedList<A<? extends B>> eopList = (LinkedList) Collections
            .synchronizedCollection(new LinkedList<A<? extends B>>());

Это журнал:

Exception in thread "main" java.lang.ClassCastException: java.util.Collections$SynchronizedCollection cannot be cast to java.util.LinkedList

person MemLeak    schedule 22.10.2013    source источник
comment
Попробовать Коллекцию‹A‹? extends B›› eopList = Collections .synchronizedCollection (новый LinkedList‹A‹? extends B››());   -  person Stanislav Mamontov    schedule 22.10.2013
comment
Это не ошибки компиляции. Они являются исключениями во время выполнения.   -  person user207421    schedule 22.10.2013


Ответы (2)



По словам nos в Является ли LinkedList потокобезопасным, когда я обращаюсь к нему только с предложением и опросом?:

LinkedList не является потокобезопасным. Блокировку придется делать самому.

Попробуйте ConcurrentLinkedQueue или LinkedBlockingDeque, если это соответствует вашим потребностям.

или попробуйте этот код из Piyush Hari ответ:

  LinkedList<A<? extends B>> eopList = (LinkedList)Collections.synchronizedList(new LinkedList<A<? extends B>());
person Engineer    schedule 22.10.2013
comment
-1 Это просто повторяет ту же ошибку, что и OP - List, возвращаемый synchronizedList, обертывает LinkedList, но сам не является LinkedList. - person Paul Bellora; 22.10.2013