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)
改用Collections.synchronizedList()方法.该方法返回一个List<T>.因此,将LHS上的类型设为List,以避免类型转换:
List<A<? extends B>> eopList = Collections.synchronizedList(new LinkedList<A<? extends B>>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |