泛型

类型参数化。可以简化类型转化,所有的类型转化均是隐式的。将类型的转换从运行时转到编译期。

泛型T跟在类声明的后面<T>,T在类对象生成时被确定。以后T全部被替换为对象生成时的类型。

如:List<String>和List<Integer>在运行事实上是相同的类型。他们都被擦除成他们的原生类型,即List。

通常来说,如果Foo是Bar的子类型,G是一种带泛型的类型,则G<Foo>不是G<Bar>的子类型。

泛型处理必须的类的类型,不能处理基本类型。

不能在static类中使用泛型:因为泛型是在实例化时确定的(new)。

不能在catch内使用泛型。

类型边界

当在类中计算诸如求和,平均值等多个泛型值时,不是全部的类型都能做求和,平均的,故引用类型边界。

public class Averge<? extends Number>这样?就可以计算了。---类型右边界

当没有指定泛型继承的类型或接口时,默认使用? extends Object,所以默认情况下任何类型都可以作为参数传入。

 

泛型通配符:

通配符范围是为了给当前泛型做约束的,约束以后的泛型就具备了运算能力。若不对泛型做约束,范型类/方法只能做简单的get,set等操作,不能具备比较,计算的条件,因为在泛型类未确定的时候,不能确定该类到底可以做哪些事。

类型<?> 即 Averge<?> 表示任何的Averge对象。Averge<?> 包括Averge<Integer>,Averge<String>,Averge<Object>的父类。

List<?>:是可以读的,因为list中确实有元素,但是不能add,因为不知道元素类型,不能运算。

<?extends SomeClass>是一个限界通配符(boundedwildcard),?代表了一个未知的类型,并且它是SomeClass的子类,也可以是SomeClass本身。

 

泛型方法:

在非泛型类中可以有泛型方法;

  修饰符 方法类型<参数类型列表> 返回值类型 方法名(参数列表) {}

泛型类继承:

声明泛型子类时必须包含其父类的类型参数。

父类是泛型类,子类必须是泛型类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值