java基础之泛型

java基础之泛型

1.为什么需要泛型呢?

​ 在泛型诞生之前,java中使用object来代替任意类型的。比如你要往一个list中存储dog对象,但是你的同事接过你的代码后,往里面又存了cat对象,这样在取对象的时候,由于都是object对象,因此向下转型变得很困难且不安全。

2.泛型的定义

把明确类型的工作,推迟到创建对象或者调用方法的时候再去执行。

简单理解的话,泛型就像孙悟空一样,七十二变,编写程序的时候,就是本尊;程序运行时,会根据具体情况变换样貌,即兼容各种类型,直到最终能救出唐三藏,也就是代码的成功运行。

3.泛型的使用

3.1泛型类

package cn.suvue.discipline.practice.genericity;

import java.util.ArrayList;
import java.util.List;

/**
 * 泛型类实例
 *
 * @author suvue
 * @date 2019/12/28
 */
public class ObjectTool<T> {
    private T obj;

    /**
     * set操作
     */
    public void setObj(T obj){
        this.obj = obj;
    }

    /**
     * get操作
     */
    public T getObj(){
        return obj;
    }

}

一句话概括:泛型让一个普通类转变成了万金油的类!

3.2泛型类

先贴出关键代码:

public<T> void show(T t){
        System.out.println(t);
    }

<T>符号很关键,是一个泛型方法的灵活所在!

3.3泛型接口

public interface Inner<T> {
    public abstract void show(T t);
}

不明确类型的实现方式

public class InnerImpl<T> implements Inner<T> {
    @Override
    public void show(T t) {
        System.out.println(t);
    }
}

明确类型的实现方式

public class InnerImplm implements Inner<String> {
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}

3.4泛型通配符

public void foreachList(List<?> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
<?>可以接受任意类型,我们心中要明确的知道一点:Object是String类的顶级父类,但是List和List没有半毛钱关系!

另外,在foreachList方法中,我们只能使用与泛型无关的方法,例如get方法;而不能使用add()或者addAll()等方法,因为此时泛型的类型还行不确定的。

3.5通配符的上下限

简单来讲,就是对通配符的范围做了限制。

常见的有两种:

  • List<? extends Number>只有Number类的子类才能使用。
  • <List<? Super Type>只有Type类的父类才可以使用。

具体的使用在实际中很复杂,尤其是源码,此处只起到抛砖引玉的作用。

3.6泛型擦除

泛型只在编译时有效,运行时都会转变成object类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值