java.lang.ClassCastException:创建同步链接列表

时间:2013-10-22 06:18:14

标签: java generics linked-list synchronized classcastexception

我想要一个带有通用A类的同步LinkedList,这里是相关部分:

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

B的接口,其中“真正的”B将是一个超类

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

2 个答案:

答案 0 :(得分:6)

请改用Collections.synchronizedList()方法。该方法返回List<T>。因此,将LHS上的类型设为List,以避免类型转换:

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

答案 1 :(得分:1)

nosIs LinkedList thread-safe when I'm accessing it with offer and poll exclusively?的话:

  

LinkedList不是线程安全的。你必须自己做锁定。

     

如果是,请尝试ConcurrentLinkedQueueLinkedBlockingDeque   它符合您的需求

或尝试Piyush Harianswer

中的此代码
  LinkedList<A<? extends B>> eopList = (LinkedList)Collections.synchronizedList(new LinkedList<A<? extends B>());