集合元素的内部演员

mar*_*man -1 java collections casting

在Java中有一种方法可以强制转换以下内容:

ArrayList<IMyType> list

ArrayList<MyType>

如果

MyType implements IMyType

Psh*_*emo 5

如果您完全确定您list只包含MyType(或其子类型)的实例,那么您可以执行类似的操作

@SuppressWarnings("unchecked")
List<MyType> myList = (List<MyType>) (List<?>) list;
Run Code Online (Sandbox Code Playgroud)

这将首先将您的列表IMyType列入任何类型的列表<?>,然后您可以将其转换为更精确的类型.但是一定要只在你list包含实例MyType而不包含其他内容时才使用它.

无论如何,这种方法很少使用,在大多数情况下可以替换

List<? extends IMytype>
Run Code Online (Sandbox Code Playgroud)

要么

List<? super MyType>
Run Code Online (Sandbox Code Playgroud)