java 泛型笔记

1. 泛型是向类或接口或方法传递类型;泛型引入的目的是把类型检查放在编译期。

2.泛型在最终会擦除为Object类型。这样导致的是在编写泛型代码的时候,对泛型元素的操作只能使用Object自带的一些方法,但是有时候我们想使用其他类型的方法呢?
比如:

public class Node{
    private People obj;
    public People get(){
        
        return obj;
    }
    
    public void set(People obj){
        this.obj=obj;
    }
    
    public void playName(){
        System.out.println(obj.getName());
    }
}

如上,代码中需要使用obj.getName()方法,因此比如规定传入的元素必须是People及其子类,那么这样的方法怎么通过泛型体现出来呢?
答案是extends,泛型重载了extends关键字,可以通过extends关键字指定最终擦除所替代的类型

public class Node<T extends People>{

    private T obj;
    
    public T get(){
        
        return obj;
    }
    
    public void set(T obj){
        this.obj=obj;
    }
    
    public void playName(){
        System.out.println(obj.getName());
    }
}

通过extends关键字,编译器会将最后类型都擦除为People类型,就好像最开始我们看见的原始代码一样。

注意:<? extends Fruit>不能写成<E extends Fruit>

 

3.

泛型与向上转型的概念

先讲一讲几个概念:

  • 协变:子类能向父类转换 Animal a1=new Cat();
  • 逆变: 父类能向子类转换 Cat a2=(Cat)a1;
  • 不变: 两者均不能转变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值