Java泛型

泛型的使用

1.jdk 5.0新增的特性

在集合中使用泛型之前的情况:

问题一:类型不安全

问题二:强转时,可能出现ClassCastException

在集合中使用泛型的情况:以HashMap为例

优点:

①编译时,就会进行类型检查,保证数据的安全

②避免了强转操作

2.在集合中使用泛型:

总结:

①集合接口或集合类在jdk5.0时都修改为带泛型的结构

②在实例化集合类时,可以指明具体的泛型类型

③指明完以后,在集合类或接口中凡是定义类或接口时,内部结构使用到类的泛型的位置,都指定为实例化的泛型类型. 比如: add(E e) → 实例化以后: add(Integer e) 根据集合定义的类型决定

④注意点:泛型的类型必须是类,不能是基本数据类型.需要用到基本数据类型的位置,拿包装类替换

⑤如果实例化时,没有指明泛型的类型.默认类型为java.lang.Object类型

3.如何自定义泛型结构:泛型类 泛型接口 泛型方法

类的内部机构就可以使用类的泛型

关于自定义泛型类   泛型接口:

如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型

要求: 如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型]

建议:实例化时指明类的泛型

注意:

由于子类在继承带泛型的父类时,指明了泛型类型.则实例化子类对象时,不再需要指明泛型类型

泛型不同的引用不能相互赋值 

静态方法中不能使用类的 泛型

异常类不能声明为泛型类

泛型方法在调用时,指明泛型参数的类型

泛型方法:在方法中出现了泛型结构,泛型参数与类的泛型参数没有任何关系

换句话说,泛型方法所属的类是不是泛型类都没有关系 

泛型方法,可以声明为静态的.原因:泛型参数是在调用方法是确定的.并非在实例化类时确定

泛型在继承方面的体现

类A是类B的父类, G<A> 和G<B>二者不具备子父类关系,  二者是并列关系

补充: 类A是类B的父类, A<G> 是 B<G> 的父类

通配符: ?

类A是类B的父类, G<A> 和G<B>是没有关系的, 二者共同的父类是: G<?>

添加(写入): List<?> 就不能向其内部添加数据

除了添加null之外

获取(读取):  允许读取数据, 读取的数据类型为Object

有限制条件的通配符的使用

? extends 类A :G<? extends A>可以作为G<A>和G<B>的父类的, 其中B是A的子类

? super 类A :G<? superA>可以作为G<A>和G<B>的父类的, 其中B是A的父类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值