<分区>
为什么这段代码可以编译
final ArrayList<?> dp1 = new ArrayList<String>();
但这不是
final ArrayList<ArrayList<?>> dp2 = new ArrayList<ArrayList<String>>();
<分区>
为什么这段代码可以编译
final ArrayList<?> dp1 = new ArrayList<String>();
但这不是
final ArrayList<ArrayList<?>> dp2 = new ArrayList<ArrayList<String>>();
最佳答案
在
final ArrayList<?> dp1 = new ArrayList<String>();
类型参数 ?
是一个通配符,它是 String
的超集(不是父类(super class)型) .所以,ArrayList<?>
是 ArrayList<String>
的 super 类型.
但是在
final ArrayList<ArrayList<?>> dp2 = new ArrayList<ArrayList<String>>();
类型参数 ArrayList<?>
(参数化类型,其中 ?
仅代表某种未知类型,与 String
没有任何关系)不是通配符,通配符将是 ? extends ArrayList<?>
, 上限为 ArrayList<?>
, 它实际上是 ArrayList<String>
的父类(super class)型.
您可以在参数化类型中阅读有关 super /子集/类型的规则 here .
关于java - 为什么 ArrayList<ArrayList<?>> list = new ArrayList<ArrayList<String>>() 无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737222/