Java泛型的使用与理解。泛型类、泛型接口、泛型方法

您所在的位置:网站首页 java哪些类型可以作为泛型 Java泛型的使用与理解。泛型类、泛型接口、泛型方法

Java泛型的使用与理解。泛型类、泛型接口、泛型方法

2024-01-22 18:18| 来源: 网络整理| 查看: 265

文章目录 1. 概述2. 特性3. 泛型的使用3.1 泛型类3.2 泛型接口3.3 泛型通配符3.4 泛型方法3.5 泛型上下边界

1. 概述

泛型,即参数化类型。一提到参数,最熟悉的就是定义方法是有形参,调用方法时有传递实参。那么参数化类型如何理解?

顾名思义,就是将类型由原来的具体类型将其参数化,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用的时候传入具体的类型(类型实参)

泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2. 特性

泛型类型在逻辑上可以看成多个不同的类型,实际上都是相同的基本类型

3. 泛型的使用

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

3.1 泛型类

基本写法:

class 类名称 { private 泛型标识 /*(成员变量类型)*/ var; ..... }

举例:

//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型 //在实例化泛型类时,必须指定T的具体类型 public class Generic{ //key这个成员变量的类型为T,T的类型由外部指定 private T key; public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定 this.key = key; } public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定 return key; } }

说明: (1)泛型的类型参数只能是类类型,不能是简单类型; (2)不能对确切的泛型类型使用instanceof操作; (3)在使用泛型的时候如果传入泛型实参,则会根据传入的泛型实参做相应的限制,此时泛型才会起到本应起到的限制作用; (4)如果不传入泛型类型实参的话,在泛型类中使用泛型的方法或成员变量定义的类型可以为任何的类型。

3.2 泛型接口

泛型接口与泛型类的定义及使用基本相同。泛型接口常被用在各种类的生产器中。

基本写法:

//定义一个泛型接口 public interface Generator { public T next(); }

当实现泛型接口的类,未传入泛型实参时:

/** * 未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中 * 即:class FruitGenerator implements Generator{ * 如果不声明泛型,如:class FruitGenerator implements Generator,编译器会报错:"Unknown class" */ class FruitGenerator implements Generator{ @Override public T next() { return null; } }

当实现泛型接口的类,传入泛型实参时:

/** * 传入泛型实参时: * 定义一个生产器实现这个接口,虽然我们只创建了一个泛型接口Generator * 但是我们可以为T传入无数个实参,形成无数种类型的Generator接口。 * 在实现类实现泛型接口时,如已将泛型类型传入实参类型,则所有使用泛型的地方都要替换成传入的实参类型 * 即:Generator,public T next();中的的T都要替换成传入的String类型。 */ public class FruitGenerator implements Generator { private String[] fruits = new String[]{"Apple", "Banana", "Pear"}; @Override public String next() { Random rand = new Random(); return fruits[rand.nextInt(3)]; } } 3.3 泛型通配符 同一种泛型可以对应多个版本(因此参数类型是不确定的),不同版本的泛型类实例是不兼容的;类型通配符一般使用?代替具体的类型实参。注意,此处?是类型实参,不是类型形参,即?和Number、String、Integer一样都是一种实际的类型,可以把?看成所有类型的父类,是一种真实的类型;? 通配符表示未知类型;?与Object区别:作用差不多,但是?可以缩小泛型的范围,例如:List


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3