我已经看到之前使用的通配符表示任何对象 - 但最近看到使用:
<? extends Object>
Run Code Online (Sandbox Code Playgroud)
由于所有对象都扩展了Object,这两个用法是同义词吗?
两者之间有区别吗?
<N extends Number> Collection<N> getThatCollection(Class<N> type)
Run Code Online (Sandbox Code Playgroud)
和
Collection<? extends Number> getThatCollection(Class<? extends Number>)
Run Code Online (Sandbox Code Playgroud) Enumeration <?之间有区别吗?扩展ZipEntry>和Enumeration <ZipEntry>?如果是这样,有什么区别?
我知道为了创建ArrayList类型的对象,我需要:
ArrayList<MyType> l = new ArrayList<MyType>();
Run Code Online (Sandbox Code Playgroud)
我知道,因为我在书中看到了这一点.
但是看看ArrayList构造函数的Java SE API,我看到:
ArrayList(Collection<? extends E> c)
我不明白,我怎么会想到指定我的新ArrayList对象将包含的对象类型?我如何从这个定义中知道我必须<MyType>在实例化和变量声明期间指定?
我正在从DotNet转向java,这种扩展的想法是新的.
我已经看到一些帖子完全解释了使用List<? extends SomeAbstract>vs. List<? super SomeAbstract>vs. List<SomeAbstract>,但我猜测在泛型中使用和不使用扩展之间没有区别.
真的吗?如果使用抽象类作为父级,答案会改变吗?
class My_AbstractExtends<T extends SomeAbstract>
Run Code Online (Sandbox Code Playgroud)
与
class My_Abstract<SomeAbstract>
Run Code Online (Sandbox Code Playgroud)
按如下方式创建子类
class My_ChildExtends extends My_AbstractExtends<ConcreteChildOfSomeAbstract>
Run Code Online (Sandbox Code Playgroud)
与
class My_Child extends My_Abstract<ConcreteChildOfSomeAbstract>
Run Code Online (Sandbox Code Playgroud)