Java基础——常用对象API(4):集合框架4:泛型

本文深入讲解Java泛型的概念,包括泛型类、泛型方法、泛型接口的使用,以及泛型的上下限定和通配符的应用。通过实例演示如何在实际编程中利用泛型提高代码的灵活性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.泛型简介

泛型:< >,里面放一个用于接收具体引用数据类型的参数范围
是jdk1.5出现的安全机制,用于编译时期。

好处:
1.将运行期间的问题ClassCastException转到了编译时期。
2.避免了强制转换的麻烦。

泛型的擦除:运行时,会将泛型去除,生成的class文件中是不带泛型的,主要是为了兼容运行的类加载器

泛型的补偿:通过获取元素的类型(getClass)自动进行转换,不用使用者强制转换。

2.泛型类

当类中操作的引用数据类型不确定的时候,就用泛型表示。

格式:class+类名<类型>

class Student<T> {//泛型类定义

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

public class Demo {
    public static void main(String[] args) {

        Student<String> s = new Student<String>();
        s.show("abc");
    }
}

3.泛型方法

格式:修饰符+<类型>+函数返回类型+函数名()

class Student {

    public <T> void show(T t) {  //泛型方法定义
        System.out.println(t);
    }
}

public class Demo {
    public static void main(String[] args) {

        Student s = new Student();
        s.show("abc");
    }
}

4.泛型接口

将泛型定义在接口上

格式:

1.在定义类时接口类型明确

interface 接口名<接口类型>
class + 类名 + implements + 接口名<接口类型>

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

class InterImpl implements Inter<String> { //在定义类时已经 明确 接口类型

    @Override
    public void show(String s) {
        System.out.println(s);
    }
}

2.在定义类时接口类型不明确

interface 接口名<接口类型T>
class + 类名<接口类型T> + implements + 接口名<接口类型T> ps:类型须保持一致

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

class InterImpl<T> implements Inter<T>{//在定义类时接口类型 不明确

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

5.泛型的上下限定:

上限:<? extends XXX>

下限:<? super XXX>

下述代码中,Dog是Animal的子类。

		//只能接收Animal类对象
        Collection<Animal> c1 = new ArrayList<Animal>();
        Collection<Animal> c2 = new ArrayList<Dog>();//报错,因为泛型限定的类型不一致,
        //就算后者是前者的子类也不行,必须前后都一致。

		//只能接收Animal类对象或者其子类对象
        Collection<? extends Animal> c3 = new ArrayList<Object>();//报错
        Collection<? extends Animal> c4 = new ArrayList<Animal>();
        Collection<? extends Animal> c5 = new ArrayList<Dog>();

		//只能接受Dog类对象或其父类对象
        Collection<? super Dog> c6 = new ArrayList<Object>();
        Collection<? super Dog> c7 = new ArrayList<Animal>();
        Collection<? super Dog> c8 = new ArrayList<Dog>();

        Collection<? super Animal> c9 = new ArrayList<Dog>();//报错

5.1 上限的体现:

boolean addAll(Collection<? extends E> c)
按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾。

5.2 下限的体现:

TreeSet(Comparator<? super E> comparator)
构造一个新的,空的树集,根据指定的比较器进行排序。

5.3 通配符的体现:

boolean removeAll(Collection<?> c)
从此列表中删除指定集合中包含的所有元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值