第十四届蓝桥杯集训——泛型

举报
红目香薰 发表于 2023/01/23 17:12:09 2023/01/23
【摘要】 ​ ​编辑第十四届蓝桥杯集训——泛型目录第十四届蓝桥杯集训——泛型泛型概述泛型方法java 中泛型标记符:包装类列表ObjectNumber泛型概述Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。假定我们有这样一个需求:写一个排...

 编辑

第十四届蓝桥杯集训——泛型


目录

第十四届蓝桥杯集训——泛型

泛型概述

泛型方法

java 中泛型标记符:

包装类列表

Object

Number




泛型概述

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用 Java 泛型。

使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。

泛型方法

你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

下面是定义泛型方法的规则:

所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 <E>)。

每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。

类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。

泛型方法体的声明和其他方法一样。

注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。

java 中泛型标记符:

E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的 java 类型

我这里用E集合作为案例,做了一个泛型遍历集合的示例,如果不使用泛型,我们需要创建三个自定义函数来遍历对应的数组。

package com.item.action;

public class Demo {

	public static void main(String[] args) {
		// 创建不同包装类类型的数组,这里只认包装类
		// Integer, Double 和 Character
		Integer[] intArray = { 7, 7, 5, 2, 1 };
		Double[] doubleArray = { 1.7, 2.7, 3.5, 2.1 };
		Character[] charArray = { 'E', 'O', 'L', 'I', 'N', 'K' };

		System.out.println("整型数组元素为:");
		printArray(intArray); // 传递一个整型数组

		System.out.println("\n双精度型数组元素为:");
		printArray(doubleArray); // 传递一个双精度型数组

		System.out.println("\n字符型数组元素为:");
		printArray(charArray); // 传递一个字符型数组
	}

	/**
	 * 自定义的泛型输入ArrayElement
	 * 
	 * @param <E>
	 * @param inputArray
	 */
	public static <E> void printArray(E[] inputArray) {
		// 输出数组元素
		for (E element : inputArray) {
			System.out.printf("%s ", element);
		}
		System.out.println();
	}
}

包装类列表

基本数据类型 包装类 包装类型位置 包装类的直接父类
boolean Boolean java.Lang.Boolean

Object

char Character java.Lang.Character
byte Byte java.Lang.Byte

Number

short Short java.Lang.Short
int Integer java.Lang.Integer
long Long java.Lang.Long
float Float java.Lang.Float
double Double java.Lang.Double

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。