《Effective Java 02》--泛型Collection(? extends E)和Collection(? super E)

一, Collection<? extends E>

需求1: 按顺序将一系列同种类型的元素全部放到堆栈中

   public static void main(String[] args) {
		FanXing2<Number> fan = new FanXing2<>();
		List<Integer> integers = new ArrayList<>();
		integers.add(1);
		integers.add(3);
		integers.add(2);
		fan.pushAll(integers);
	}

    public void pushAll(Collection<E> src) {
		Stack<E> stack = new Stack<>();
		for (E e : src) {
			stack.push(e);
		}
		System.out.println(stack);
	}

此时编译报错, 类型匹配异常:

The method pushAll(Collection<Number>) in the type FanXing2<Number> is not applicable for the arguments (List<Integer>)

对pushAll()方法进行改造:

   public void pushAll(Collection<? extends E> src) {
		Stack<E> stack = new Stack<>();
		for (E e : src) {
			stack.push(e);
		}
		System.out.println(stack);
	}

打印结果: [1, 3, 2]    即ok

## Integer是Number的子类, 但是Collection<Integer>不是Collection<Number>的子类, 所以用Collection<? extends E>来进行相关的类型处理;

 

二, Collection<? super E>

需求2: 按顺序将一系列不同种类型的元素全部放到堆栈中

   public static void main(String[] args) {
		FanXing2<Number> fan = new FanXing2<>();
		List<Object> Objects = new ArrayList<>();
		Objects.add(1);
		Objects.add("3");
		Objects.add("你好");
		fan.pushAll(Objects);
	}

    public void pushAll3(Collection<? super E> src) {
		Stack<Object> stack = new Stack<>();
		for (Object e : src) {
			stack.push(e);
		}
		System.out.println(stack);
	}

##  同理, Number是Object的子类, 但是Collection<Number>不是Collection<Object>的子类, 所以用Collection<? super E>来进行相关的类型处理;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值