1) Why does line 1 successfully compile?
第一行编译因为List< Sub>是List< ;?的子类延伸超级>如果List不允许您向其添加任何新成员,则只能为true.
?表示您并不完全知道它是List< Sub>或列出< Sub1>,因此允许在列表中添加新元素是不安全的,因此不允许它.
2) Is line 1 a good practice in declaring a List (or other
collections)?
如果你已经知道它将是List< Sub>然后我没有找到任何用处,但是当您将List传递给其他类(如Utilities)时,会使用通配符.
3) Why does line 2 fail compilation, after list was declared to be
type Sub in line 1?
因为正如我已经解释的那样,当你不知道确切的类型时,将任何元素添加到列表是不安全的.
4) Eclipse’s autocompletion says only “null” elements are allowed in
list now. Why?
因为null是每个引用类型,所以这就是为什么你可以为任何对象赋值null.
好的参考文献: