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

Mem*_*eak 1 java generics linked-list synchronized classcastexception

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

public abstract class A<T extends B> implements Runnable {
Run Code Online (Sandbox Code Playgroud)

B的接口,即"真正的"B,将是一个超类

public interface B{
Run Code Online (Sandbox Code Playgroud)

以下设置将引发运行时错误:

LinkedList<A<? extends B>> eopList = (LinkedList<A<? extends B>>) Collections
            .synchronizedCollection(new LinkedList<A<? extends B>>());
Run Code Online (Sandbox Code Playgroud)

我找到了以下提案,但它也不会编译:

LinkedList<A<? extends B>> eopList = (LinkedList) Collections
            .synchronizedCollection(new LinkedList<A<? extends B>>());
Run Code Online (Sandbox Code Playgroud)

这是日志:

Exception in thread "main" java.lang.ClassCastException: java.util.Collections$SynchronizedCollection cannot be cast to java.util.LinkedList
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 6

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

List<A<? extends B>> eopList = Collections.synchronizedList(new LinkedList<A<? extends B>>());
Run Code Online (Sandbox Code Playgroud)