Wildcards in Java

无界通配符?在Java中用于表示不确定类型的列表,例如List<?>。它适用于不需要访问类型参数的方法,如打印列表元素。在示例中,printList方法接受任何类型的列表并打印其元素,由于只使用了Object的方法,因此可以接受List<Integer>和List<String>。然而,无界通配符不允许添加元素,因为类型未知,如尝试将一个元素添加到List<?>列表时会报错。
摘要由CSDN通过智能技术生成

Unbounded wildcards

The unbounded wildcard type是用通配符字母?来表示的,比如List<?>,我们把这个叫做一个未知类型的列表。

通常有两种情况特别适用使用unbounded wildcard type:

  • 如果你写一个method,里面的实现是需要用到Object类的方法的
  • 当你的代码用到generic class的方法,但是这个方法不依赖type parameter

例子:写一个方法打印出来列表中所有元素(并未告知是何种类型的列表)

public static void printList(List<?> list){
	for(Object elem: list){
		System.out.println(elem + " ");
	}
}

List<Integer> l1 = Arrays.asList(1,2,3);
List<String> l2 = Arryas.asList("one", "two", "three");
printList(l1);
printList(l2);

这里你的方法就不能使用LIst<Object>,因为List<Integer>和List<String>都不是它的subtype,所以需要使用unbounded wildcard type,而且里面的实现println方法最终会调用Object的toString方法。

List<?> list = new ArrayList<String> ();
list.add("aString"); //does not compile - we don't know it is a List<String>
list.clear(); //this is fine, does not depend on the generic parameter type
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值