Java泛型

目录

一.介绍

二.语法

1.声明

2.实例化

3.注意事项

4.泛型的继承和通配符

三.自定义泛型

1.自定义泛型类

2.自定义泛型接口

3.自定义泛型方法


一.介绍

泛型又称参数化类型,其实参数化类型这个名更好理解,一个类型可以像参数一样被使用,下面给大家看一个例子:

class Person<T>{
    public T name;
    public Person(T name) {
        this.name = name;
    }
}

这个T就是一个数据类型,我们可以自行定义传入的类型是什么,它可以是String name,也可以是int name。

总的来说,泛式是在类的声明时,通过一个标识表示类中某个属性的类型,某个方法的返回值的类型或参数类型。

泛型的类型检查是在编译时进行,编译器会根据泛型类型声明进行检查,如果输入的不符合要求,就会报错;在运行时,Java使用类型擦除来实现泛型,泛型的类型参数信息会被部分擦除,但由于编译时已经进行了类型检查,所以不会出现运行时因为类型不匹配(与泛型相关的类型不匹配)而导致的错误。

二.语法

1.声明

interface 接口<T>{} 和 class 类<K,V>{}

说明:

1)其中,T,K,V不代表指,表示的类型;

2)这个表示类型的字母可以是任何字母,但是推荐使用T (Type).

2.实例化

在类后指定类型参数的值。

Set<String> set=new HashSet<String>();
ArrayList<Dog> arrayList=new ArrayList<Dog>();

3.注意事项

1)泛型只能使用引用类型,像:ArrayList<int> arrayList=new ArrayList<int>(); 这种就不对;

2)在指定泛型具体类型后,可传入给类型或其子类型;

3)我们再写泛型的时候,像这样的 Set<String> set=new HashSet<String>(); 在Java8后,其实后面的<>中可以不填,可以写成 Set<String> set=new HashSet<>(); 

4)没有给泛型指定具体类型,默认是Object类。

4.泛型的继承和通配符

4.1 泛型的继承

泛型不具备继承性。

这里举个例子:

    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("123");
        list.add("456");
        print(list);
    }
    private static void print(List<String> t){
        System.out.println(t);
    }

我们使用这样一个方法打印一个字符串类型List的值,如果我们想要打印int类型的值,那我们要把String改成Integer类型。如果我们将print方法中的List<>尖括号内的String改成Object类行不行?

答案是不行的,虽然Object类是String的父类,但List<String>与List<Object>是没有关系的,他们两个不具备继承关系。

那如果我们想要实现上面的效果呢,那就要使用通配符了。

4.2 通配符

<?>:支持任意泛型类型;

<?extends A>:支持A类以及A类的子类,规定了泛型的上限;

<?super A>:支持A类以及A类的父类,规定了泛型的下限。

三.自定义泛型

1.自定义泛型类

基础语法:class 类名<T,R...>{成员}

注意事项:

1)泛型标识符可以有多个;

2)普通成员可以使用泛型;

3)使用泛型数组不能初始化;

4)静态方法中不能使用类的泛型;

5)泛型类的类型,是在创建对象时确定的;如果在创建对象时没有指定类型,默认为Object。

2.自定义泛型接口

基本语法:interface 接口名<T,R...>{}

注意事项:

1)接口中,静态成员不能使用泛型;

2)泛型接口的类型,在继承接口或实现接口时必须确定,不能也写泛型;

3)没有指定类型,默认为Object。

3.自定义泛型方法

基本语法:修饰符 <T,R...> 返回类型 方法名(参数列表)

注意事项:

1)泛型方法,可以定义在普通类中,也可以定义在泛型类中;

2)当泛型方法被调用时,类型会确定必须。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值