Java中,关于泛型中#通配符#的使用

1.通配符:在泛型中,通配符可以接收多种类型的泛型数据
2.定义:<?>
3.作用:可以接收多种类型的泛型属性,提高代码的利用率


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class 通配符的使用 {
	public static void main(String[] args) {
		ArrayList<String> arrayList = new ArrayList<>();
		arrayList.add("你好");
		arrayList.add("中国");
		arrayList.add("我爱你");
		ArrayList<Integer> arrayList2 = new ArrayList<>();
		arrayList2.add(123);
		arrayList2.add(456);
		arrayList2.add(789);
		
		通配符的使用 t = new 通配符的使用();
		t.test(arrayList); //String类型的List传入test
		System.out.println("--------------------");
		t.test(arrayList2);//Integer类型的List传入test
	}

	//3.<?>可以接收多种类型的泛型属性,提高代码的利用率
	public void test(List<?> list) {
		Iterator<?> iterator = list.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

在这里插入图片描述
4.对于添加和获取数据的说明:

  • <?> 中是不能使用add(),添加除了null以外的数据。
  • <?> 类型 可以使用get(int index)获取数据
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
 * 1.通配符:在泛型中,通配符可以接收多种类型的泛型数据
 * 2.定义:<?>
 * 3.作用:可以接收多种类型的泛型属性,提高代码的利用率
 * 
 * 4.对于添加和获取数据的说明:
 * - <?> 中是不能使用add(),添加除了null以外的数据。
 * - <?> 类型 可以使用get(int index)获取数据
 * 
 * 5.有限制条件的限制符的使用
 * - <? extends A>   将A左为上限,可以传A以及A的子类
 * - <? super A>   将A左为下限,可以传A以及A的父类
 */

public class 通配符的使用 {
	public static void main(String[] args) {
		ArrayList<String> arrayList = new ArrayList<>();
		arrayList.add("你好");
		arrayList.add("中国");
		arrayList.add("我爱你");	
		
		System.out.println("--------------------");
		List<?> list3;
		
		//1.通配符可以接收多种类型的泛型数据
		list3=arrayList;
		
		//4.1 <?> 中是不能使用add(),添加除了null以外的数据。
	/*	list3.add(123); 报错:不能添加数据
		list3.add("123"); 报错:不能添加数据 */
		list3.add(null);  //注意:唯一可以添加的是null
		
		//4.2 <?> 类型 可以使用get(int index)获取数据
		Object object = list3.get(0);
		System.out.println(object);
		
	} 
}

在这里插入图片描述

5.有限制条件的限制符的使用

  • <? extends A> 将A左为上限,可以传A以及A的子类
  • <? super A> 将A左为下限,可以传A以及A的父类
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class 通配符的使用 {
	public static void main(String[] args) {	
	} 
	public void test() {
		ArrayList<Object> list1 = new ArrayList<>(); 
		ArrayList<Person> list2 = new ArrayList<>(); 
		ArrayList<Student> list3 = new ArrayList<>(); 
		
		//5.1 <? extends A>   将A左为上限,可以传A以及A的子类
		List<? extends Person> l1 = null;
		//5.2 <? super A>   将A左为下限,可以传A以及A的父类
		List<? super Person> l2 = null;
		
//		l1 = list1; 报错:因为Object超过了Person
		l1 = list2;
		l1 = list3;
		
		l2 = list1;
		l2 = list2;
//		l2 = list3; 报错:因为Student低于了Person
	}
}

class Person{
	
}
class Student extends Person{
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值