Java泛型理解

泛型

  • 泛型就是可以在编写时不指定类型,到使用时才指定,用来规范代码的一种编码范式
  • 规范的一般有T 类型,K key,V value,E element,当然A-Z都是可以的,一些规范而已
为什么使用泛型
  • 如果不使用泛型,那么就有可能让程序抛出一些运行时原本可以在编译时避免出现的一些异常
  • 不规定泛型就可以在list中存放任意元素,那么当处理时就很有可能出现运行时异常比如下边这种
List list = new ArrayList();
        list.add("hello");
        list.add("1");
        list.add(2);
        //字符串不能转换为Integer类型所以会出类型转换异常
        list.forEach( value -> System.out.println(Integer.parseInt(value + "")));
  • 但是如果规定了泛型那么再添加int类型元素时编译器就会报错,那么这样就可以避免运行时异常的出现,
List<String> list = new ArrayList();
        list.add("hello");
        list.add("1");
        list.add(2); //报错

        list.forEach( value -> System.out.println(Integer.parseInt(value + "")));
自定义泛型
  • 自定义泛型属性要绑定在类上比如,这样就可以在创建对象时指定类型
  • 可以绑定多个类型
class Student<T>{
//class Student<T,A,B>{
	T data;
	//定义getset方法
	public T getData(){
        return data;
    }
    public void set(T data) {
        this.data = data;
    }
}
  • 自定义参数泛型
  • ? 是通配符 ? extends Object 表示list的参数必须是Object或者Object的子类,可以按照需求修改
  • ? super xx 表示参数必须是xx或者xx的父类
  • ? 通配符可以直接拿来用
  • 如果是明确的泛型那么需要在类上或者方法上声明才可以使用
	public void show(List<? extends Object> t) {
        System.out.println(t);
    }
    public void show(List<? super xx> t) {
        System.out.println(t);
    }
  • 自定义泛型方法
  • 如果声明在类上可以不用声明在方法上
  • 如果没有在类上声明必须在方法上声明
	public <K,V> void show(K k,V v) {
        System.out.println(k);
        System.out.println(v);
    }
泛型擦除
  • 泛型是用来让编译器看的,也就是说运行时会把泛型去掉,也就称之为泛型擦除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值