当前位置: 首页 > news >正文

Java基础之泛型

Java基础之泛型

  • 一、泛型应用范围
  • 二、使用泛型方法
  • 三、泛型类

一、泛型应用范围

泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

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

二、使用泛型方法

  • 在方法的返回类型之前声明类型参数: 泛型方法的类型参数声明应该在方法的返回类型之前,使用尖括号括起来。
public <T> void methodName(T parameter) {// 方法实现
}
  • 使用泛型类型参数: 在方法的参数列表、返回类型或方法体中,可以使用泛型类型参数来表示参数类型或返回类型
public <T> T someMethod(T input) {// 方法实现return input;
}
  • 类型参数可以有任意名称: 泛型方法中的类型参数可以使用任意合法的标识符名称。通常,使用单个大写字母(如 TEKV 等)表示类型参数是一种常见的惯例。
public <E> void processElement(E element) {// 方法实现
}
  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • - 表示不确定的 java 类型
  • 泛型方法可以有多个类型参数: 泛型方法可以有多个类型参数,这些参数在尖括号中逗号分隔。
public <T, U> void processPair(T first, U second) {// 方法实现
}
  • 类型参数的范围(bounded type parameters): 类型参数可以被限制为某个特定的类或接口,以确保方法能够使用特定类型的方法或属性。这称为类型参数的边界。
public <T extends Number> void processNumber(T number) {// 方法实现
}
  • 泛型方法可以在泛型类或非泛型类中定义: 泛型方法不一定要在泛型类中定义,它可以在普通类中定义,或者在泛型类中定义,或者在接口中定义。
// 在普通类中定义泛型方法
public class MyClass {public <T> void myMethod(T parameter) {// 方法实现}
}// 在泛型类中定义泛型方法
public class MyGenericClass<T> {public <U> void myMethod(U parameter) {// 方法实现}
}// 在接口中定义泛型方法
public interface MyInterface {<T> void myMethod(T parameter);
}

代码示例

public class GenericMethodExample {// 泛型方法,接受任意类型的数组并打印public <T> void printArray(T[] array) {for (T element : array) {System.out.print(element + " ");}System.out.println();}// 泛型方法,接受任意类型的参数并返回public <T> T identity(T input) {return input;}// 泛型方法,使用类型参数的边界public <T extends Number> double square(T number) {return Math.pow(number.doubleValue(), 2);}public static void main(String[] args) {GenericMethodExample example = new GenericMethodExample();// 调用泛型方法,传入不同类型的数组Integer[] intArray = {1, 2, 3, 4, 5};Double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};String[] stringArray = {"one", "two", "three", "four", "five"};System.out.println("Integer Array:");example.printArray(intArray);System.out.println("Double Array:");example.printArray(doubleArray);System.out.println("String Array:");example.printArray(stringArray);// 调用泛型方法,传入不同类型的参数String result1 = example.identity("Hello");Integer result2 = example.identity(123);System.out.println("Identity Result 1: " + result1);System.out.println("Identity Result 2: " + result2);// 使用类型参数的边界double squareResult = example.square(4);System.out.println("Square Result: " + squareResult);}
}

三、泛型类

泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分。

和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型。

代码示例

public class Box<T> {private T t;public void add(T t) {this.t = t;}public T get() {return t;}public static void main(String[] args) {Box<Integer> integerBox = new Box<Integer>();Box<String> stringBox = new Box<String>();integerBox.add(new Integer(10));stringBox.add(new String("学生数据"));System.out.printf("整型值为 :%d\n\n", integerBox.get());System.out.printf("字符串为 :%s\n", stringBox.get());}
http://www.lryc.cn/news/246330.html

相关文章:

  • WPF实战项目十五(客户端):RestSharp的使用
  • C语言基础篇5:指针(二)
  • 「Verilog学习笔记」非整数倍数据位宽转换8to12
  • Qt_一个由单例引发的崩溃
  • P8A004-系统加固-磁盘访问权限
  • 数智赋能 锦江汽车携手苏州金龙打造高质量盛会服务
  • kolla-ansible 部署OpenStack云计算平台
  • wireshark 抓包提示
  • Redis未授权访问-CNVD-2019-21763复现
  • 汇编:常用的输入与输出
  • MYSQL基础之【正则表达式,事务处理】
  • Mysql并发时常见的死锁及解决方法
  • 二十九、微服务案例完善(数据聚合、自动补全、数据同步)
  • vue 目录树的展开与关闭
  • 【Docker】python flask 项目如何打包成 Docker images镜像 上传至阿里云ACR私有(共有)镜像仓库 集成Drone CI
  • 力扣labuladong——一刷day55
  • springboot实现验证码功能
  • 内测分发平台是否支持应用的微服务化部署
  • 1140. 最短网络,prim算法,模板题
  • 升级jdk17过程中,原来的jdk8下的webservice客户端怎样处理
  • Verilog基本语法概述
  • 论文阅读:C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range SLAM
  • 蓝桥杯刷题day01——字符串中的单词反转
  • Python---引用变量与可变、非可变类型
  • GDOUCTF2023-Reverse WP
  • Day43力扣打卡
  • elementui的table合并列,三个一组
  • HarmonyOS-Service服务开发(一)
  • FLASK博客系列4——再谈路由
  • sql之left join、right join、inner join的区别