Java—泛型

目录

泛型介绍

泛型类

泛型方法

泛型接口

继承性

泛型通配符

总结


泛型介绍

泛型是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。
泛型的格式:<数据类型>
注意:泛型只支持引用数据类型

泛型还没出现时,集合是如何存储数据的?
        如果我们没有给集合指定类型,集合会默认所有的数据类型都是object类型,在泛型还未出现时也是如此,此时我们可以往集合中添加任意类型的数据。 但这种方式存在一个缺点,即多态的缺点,我们在获取数据的时候,无法使用它自身的特有行为。

泛型的好处
1. 统一数据类型;
2. 把运行时期的问题提前至编译时期,避免了强制类型转换可能出现的异常,因为在编译阶段就能将数据类型确定下来。

泛型的细节
1. 泛型中不能写基本数据类型;
2. 指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型;
3. 如果不写泛型,类型默认是Object类。


泛型类


泛型方法

当方法中形参数据类型不确定时,可以使用泛型方法。
方案1. 使用类名后面定义的泛型(类名后定义的泛型所有方法都能用)
方案2. 在方法声明上定义泛型(在方法上定义的泛型只有该方法自身能用)

// 在类名后定义泛型
public class ArrayList<E>

// 在方法上定义泛型
public <E> boolean add (E e)

泛型接口

//实现类给出具体类型
public class MyArrayList1 implements List<String>

//实现类延续接口的泛型,创建对象时再确定
public class MyArrayList2<E> implements List<E>


继承性

注意:数据具备继承性,但泛型不具备继承性。

代码示例如下。

class Ye {}
class Fu extends Ye {}
class Zi extends Fu {}

public class Test {
    public static void main(String[] args) throws ParseException {

        ArrayList<Ye> ye = new ArrayList<>();
        ArrayList<Fu> fu = new ArrayList<>();
        ArrayList<Zi> zi = new ArrayList<>();

        method(ye);
        method(fu); //报错:泛型不具备继承性
        method(zi); //报错:泛型不具备继承性

        ye.add(new Ye());
        ye.add(new Fu()); //不报错:数据具备继承性
        ye.add(new Zi()); //不报错:数据具备继承性

    }

    public static void method(ArrayList<Ye> list) {}
}


泛型通配符

泛型存在一个弊端,即它可以接受任何类型的数据,如果我们只希望它接受某一类数据时,可以使用通配符。

通配符格式
<? super E>:表示可以传递E或者E的所有父类类型数据
<? extends E>:表示可以传递E或者E的所有子类类型数据

代码示例如下

class Ye {}
class Fu extends Ye {}
class Zi extends Fu {}

public class Test {
    public static void main(String[] args) throws ParseException {

        ArrayList<Ye> ye = new ArrayList<>();
        ArrayList<Fu> fu = new ArrayList<>();
        ArrayList<Zi> zi = new ArrayList<>();
        
        method1(ye);
        method1(fu);
        method1(zi); //报错:zi不是fu的父类
        
        method2(ye); //报错:ye不是fu的子类
        method2(fu);
        method2(zi);

    }

    public static void method1(ArrayList<? super Fu> list) {}
    public static void method2(ArrayList<? extends Fu> list) {}
    
}

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值