Java学习 泛型

一、简介

1. 以集合为例,不指定泛型的容器,可以存放任何类型的元素,指定了泛型的容器,只能存放指定类型的元素以及其子类。

2. 泛型的用法是在容器后面添加<Type>,一般简写为<T>,Type可以是类,抽象类,接口。ArrayList<Hero> heroes = new ArrayList<Hero>();,JDK7以后,后面的泛型可以用<>来代替,写为ArrayList<Hero> heroes = new ArrayList<>();

二、通配符

1. ? extends

ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型。heroList 的泛型可能是Hero,heroList 的泛型可能是APHero,heroList 的泛型可能是ADHero。

所以 可以确凿的是,从heroList取出来的对象,一定是可以转型成Hero的。但是,不能往里面放东西,因为,放APHero就不满足<ADHero>,放ADHero又不满足<APHero>。

2. ? super

ArrayList heroList<? super Hero> 表示这是一个Hero泛型或者其父类泛型。heroList的泛型可能是Hero,heroList的泛型可能是Object。

可以往里面插入Hero以及Hero的子类,但是取出来有风险,因为不确定取出来是Hero还是Object。

3.  ? 

泛型通配符? 代表任意泛型,换句话说,这个容器什么泛型都有可能。所以只能以Object的形式取出来,以其它任意形式取出都会报编译错误,并且不能往里面放对象,因为不知道到底是一个什么泛型的容器。

总结:如果希望只取出,不插入,就使用? extends。如果希望只插入,不取出,就使用? super。如果希望,又能插入,又能取出,就不要用泛型。

三、泛型转型

子类泛型不可以转换为父类泛型,父类泛型也不可以转换为子类泛型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值