Java基础第二部分-泛型(Generics)

一、泛型是什么

泛型的本质是参数化类型

定义:泛型提供了编译时类型安全检测机制,泛型的本质是参数化类型:给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。
在这里插入图片描述

二、为什么使用泛型

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

  • 保证编译期类型的安全性
  • 消除强制转换,避免了强制类型转换运行时异常
  • 同一个类可以操作多种类型数据,代码复用
  • 避免了不必要的装箱、拆箱操作,提高程序的性能

2.1 java 中泛型标记符(泛型参数):

T、E、R、K、V 对于程序运行时没有区别,只是名字不同
? :表示不确定的泛型类型
T :(type) 表示具体的一个泛型类型(任意类型 type)
K V :(key-value) 分别代表 Map 中的键值 Key Value
E :集合中元素的类型 element,例如 ArrayList 中的元素
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

在这里插入图片描述

2.2泛型类、泛型接口、泛型方法。

这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2.2.1 泛型类:

注意:泛型类型必须是引用类型(非基本数据类型)
定义泛型类,在类名后添加一对尖括号,并在尖括号中填写类型参数,参数可以有多个,多个参数使用逗号分隔:

泛型类:把泛型定义在类上

public class Generic<T> { // T:任意类型 type
    private T value;

    public Generic(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Generic{" +
                "value=" + value +
                '}';
    }
}

测试:

    public static void main(String[] args) {
        Generic<String> stringGeneric = new Generic<>("T (type) 表示具体的一个泛型类型");
        Generic<Integer> integerGeneric = new Generic<>(666);// int类型
        Generic<Boolean> booleanGeneric = new Generic<>(true);// Boolean类型
        // 打印结果
        System.out.println(stringGeneric);
        System.out.println(integerGeneric);
        System.out.println(booleanGeneric);
    }

2.2.2 泛型接口:

接口:

public interface GenericInterface<T> {
    void work(T value);
}

实现类:给类型指定一个参数化类型(尖括号内)

public class StringImpl implements GenericInterface<String>{
    @Override
    public void work(String value) {
        System.out.println(value);
    }
}
public class IntImpl implements GenericInterface<Integer>{
    @Override
    public void work(Integer value) {
        System.out.println(value);
    }
}

测试类:

    public static void main(String[] args) {
        StringImpl string = new StringImpl();
        string.work("实现泛型接口");
        IntImpl anInt = new IntImpl();
        anInt.work(123);
    }

2.2.3 泛型方法

泛型方法,是在调用方法的时候指明泛型的具体类型 。

泛型方法:

public class GenericMethod {
    public <T> String commonMethod(int id,T name,T age){
        String res=id+"\t"+name+"\t"+age;
        System.out.println(res);
        return res;
    }

测试类:

    public static void main(String[] args) {
        GenericMethod genericMethod = new GenericMethod();
        genericMethod.commonMethod(001,"张三",12);
    }

三:泛型边界通配符

<?>  无边界通配符 
<? extend E>  上边界通配符:接受指定类及其子类类型的数据。
<? supper E>  下边界通配符:接受指定类及其父类类型的数据.。

注意: 你可以为一个泛型指定上边界或下边界, 但是不能同时指定上下边界。

总结:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执着与它共情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值