java泛型通配符
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
通配符基本使用
泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。
此时只能接受数据,不能往该集合中存储数据。
泛型的通配符:
?:代表任意的数据类型
使用方式:
不能创建对象使用
只能作为方法的参数使用
泛型的上限 :
格式 :类型名称 <? extends 类 > 对象名称
意义: 只能接收该类型及其子类
泛型的下限 :
格式 : 类型名称 <? super 类 > 对象名称
意义 : 只能接收该类型及其父类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package com.itheima.demo03.Generic;import java.util.ArrayList;import java.util.Iterator;public class Demo05Generic { public static void main (String[] args) { ArrayList<Integer> list01 = new ArrayList<>(); list01.add(1 ); list01.add(2 ); ArrayList<String> list02 = new ArrayList<>(); list02.add("a" ); list02.add("b" ); printArray(list01); printArray(list02); } public static void printArray (ArrayList<?> list) { Iterator<?> it = list.iterator(); while (it.hasNext()){ Object o = it.next(); System.out.println(o); } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package com.itheima.demo03.Generic;import java.util.ArrayList;import java.util.Collection;public class Demo06Generic { public static void main (String[] args) { Collection<Integer> list1 = new ArrayList<Integer>(); Collection<String> list2 = new ArrayList<String>(); Collection<Number> list3 = new ArrayList<Number>(); Collection<Object> list4 = new ArrayList<Object>(); getElement1(list1); getElement1(list3); getElement2(list3); getElement2(list4); } public static void getElement1 (Collection<? extends Number> coll) {} public static void getElement2 (Collection<? super Number> coll) {} }