首页 > 技术文章 > Java中泛型的基本介绍

9-King 2020-08-08 23:15 原文

1-1.泛型的概述

泛型是一种未知的数据类型。

当我们不知道使用什么数据类型的时候,可以使用泛型。

泛型也可以被看作是一个变量,用来接收数据类型。

如:ArrayList集合在定义时,不知道集合中都会存储什么类型的数据,所以类型使用泛型,在创建集合对象时,就会确定泛型的数据类型,把数据类型作为参数传递赋值给泛型E。

1-2.使用泛型的好处

1).避免了类型转换的麻烦,存储的是什么类型,取出就是什么类型。

2).把运行期间的异常(代码运行之后会抛出异常)提前到了编译期(写代码时就会报错)。

使用泛型的弊端:在使用泛型后,泛型是什么类型,就只能存储什么类型的数据。

2-1.定义和使用含有泛型的类

可以定义一个含有泛型的类,模拟ArrayList类。

2-2.定义和使用含有泛型的方法

定义含有方法:泛型定义在方法的修饰符之后,在返回值类型之前。

格式:
      修饰符 <泛型> 返回值类型 方法名称 (参数列表(使用泛型)){方法体;}

含有泛型的方法在调用方法的时候确定泛型的数据类型。

传递的是什么类型的参数,泛型就是什么类型。

2-3.定义和使用含有泛型的接口

含有泛型的类的第一种使用方式是定义接口的实现类,实现接口,指定接口的类型。

格式:
      public interface Iterator<E>{E next();}

Scanner类实现了Iterator接口,并指定接口的泛型为String,并重写next方法。

public final class Scanner implements Iterator<String>{ }

含有泛型的接口的第二种使用方式:

接口使用什么泛型,实现类就使用什么泛型,类跟着接口走,就相当于定义了一个含有泛型的类,创建对象的时候确定泛型的类型。

格式:

      public interface List<E>{boolean add(E e);

                  E get(int index);}

      public class ArrayList<E> implements List<E> { boolean add(E e);}

即:

第一种方式是实现类确定泛型类型。

第二种方式是实例化确定泛型类型。

2-4.泛型的通配符

通配符:? 代表任意的数据类型。

不知道使用什么类型来接收时,此时可以使用,表示未知的通配符。

此时只能接收数据,不能往该集合中存储数据。

使用方式:

不能创建对象使用,只能作为方法的参数使用。

注意:泛型是没有继承概念的,ArrayList<String>集合是不能使用ArrayList<Object>集合接收。

定义集合是不能使用泛型通配符的。

泛型的上限限定:? extends E;代表使用的泛型只能是E类型的子类/本身。

泛型的下限限定:? extends E;代表使用的泛型只能是E类型的父类/本身。

类与类之间的关系:
Integer extends Number extends Object;

String extends Object.

推荐阅读