java 泛型类型通配符
有勇气的牛排
1075
Java
2021-08-26 21:57:34
1 介绍
为了表示各种泛型List的父类,可以使用类型通配符
如果说我们不希望List<?>是任何泛型List的父类,只希望它代表某一类泛型List的父类,可以使用类型通配符的上限
除了可以指定类型统配符的上限,我们也可以指定类型通配符的下限
2 代码
package itheima_05;
import java.util.ArrayList;
import java.util.List;
public class GenericDemo {
public static void main(String[] args) {
ArrayList<?> list1 = new ArrayList<Object>();
ArrayList<?> list2 = new ArrayList<Number>();
ArrayList<?> list3 = new ArrayList<Integer>();
System.out.println("--------");
ArrayList<? extends Number> list5 = new ArrayList<Number>();
ArrayList<? extends Number> list6 = new ArrayList<Integer>();
System.out.println("--------");
List<? super Number> list7 = new ArrayList<Object>();
List<? super Number> list8 = new ArrayList<Number>();
}
}
参考地址:https://www.bilibili.com/video/BV18J411W7cE?p=254
<h2><a id="1__0"></a>1 介绍</h2>
<p>为了表示各种泛型List的父类,可以使用类型通配符</p>
<ul>
<li>
<p>类型通配符:< ?></p>
</li>
<li>
<p>List<?>:表示元素类型未知的List,它的元素可以匹配<strong>任何的类型</strong></p>
</li>
<li>
<p>这种带通配符的List仅表示它是各种泛型类List的父类,兵部能把元素添加到其中</p>
</li>
</ul>
<p>如果说我们不希望List<?>是任何泛型List的父类,只希望它代表某一类泛型List的父类,可以使用类型通配符的上限</p>
<ul>
<li>
<p>类型统配父上限:<strong>< ? extends类型></strong></p>
</li>
<li>
<p>List< ? extends Number>:它表示的类型是<strong>Number或者其子类型</strong></p>
</li>
</ul>
<p>除了可以指定类型统配符的上限,我们也可以指定类型通配符的下限</p>
<ul>
<li>
<p>类型通配符下限:< ? super 类型></p>
</li>
<li>
<p>List< ?super Number>:它表示类型是Number或者其父类型</p>
</li>
</ul>
<h2><a id="2__22"></a>2 代码</h2>
<pre><div class="hljs"><code class="lang-java"><span class="hljs-keyword">package</span> itheima_05;
<span class="hljs-keyword">import</span> java.util.ArrayList;
<span class="hljs-keyword">import</span> java.util.List;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">GenericDemo</span> {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> {
<span class="hljs-comment">// 类型通配符:<?></span>
ArrayList<?> list1 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Object>();
ArrayList<?> list2 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Number>();
ArrayList<?> list3 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Integer>();
System.out.println(<span class="hljs-string">"--------"</span>);
<span class="hljs-comment">// 类型通配符上限</span>
<span class="hljs-comment">// ArrayList<? extends Number> list4 = new ArrayList<Object>(); // 报错 这里达到上限</span>
ArrayList<? <span class="hljs-keyword">extends</span> <span class="hljs-title class_">Number</span>> list5 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Number>();
ArrayList<? <span class="hljs-keyword">extends</span> <span class="hljs-title class_">Number</span>> list6 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Integer>();
System.out.println(<span class="hljs-string">"--------"</span>);
<span class="hljs-comment">// 类型通配符下限:<? super 类型></span>
List<? <span class="hljs-built_in">super</span> Number> list7 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Object>();
List<? <span class="hljs-built_in">super</span> Number> list8 = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Number>();
<span class="hljs-comment">// List<? super Number> list9 = new ArrayList<Integer>(); // 报错 这里是下限</span>
}
}
</code></div></pre>
<p>参考地址:https://www.bilibili.com/video/BV18J411W7cE?p=254</p>
留言