<? extends ParentClass>
<? super ChildClass>
其实很好理解,不需要专门去记它。如字面所言,通配符?代表要匹配的类型,则 ? extends ParentClass 表示要匹配的类型继承自ParentClass类,而 ? super ChildClass 表示要匹配的类型是ChildClass的父类。
限定通配符包括匹配的父类/子类自身,即跟在extends或super后的ParentClass或ChildClass。
注意:
可以把未知类型指向具体类型,不能将具体类型指向未知类型。
ArrayList<String> ar1 = new ArrayList<?>;
ArrayList<?> ar2 = new ArrayList<String>; //错误
Class<?> c;
Class<String> c1;
c = c1; // 正确运行
c1 = c; // 报错,不能这样操作。