例如,我有一堂课
class Element {}
Run Code Online (Sandbox Code Playgroud)
我有一些课程正在扩展这门课程
class ExtraElement extends Element {}
Run Code Online (Sandbox Code Playgroud)
那么这个陈述是一样的吗?
List<Element> list & List<? extends Element>
Run Code Online (Sandbox Code Playgroud)
因为据我所知wildcards定义了一类的类.在这两个语句中,我可以传递任何扩展类的元素,Element所以基本上是Element类的一部分.
不,他们不一样.
List<? extends Element>可能是a List<ExtraElement>或者它可能是a List<Element>,但编译器无法知道它是哪一个.
如果是List<ExtraElement>,你不能添加SomeNonExtraElement到列表中,例如(但你可以添加SomeNonExtraElement到List<Element>).
要强制执行此操作,编译器将不允许您向a 添加任何内容List<? extends Something>.