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

JAVA基础知识:泛型

一、什么是泛型?

        泛型是Java中的一种参数化类型机制,它允许在类或方法的声明中使用类型参数,以实现代码的通用性和类型安全性。通过使用泛型,我们可以编写更加灵活和可复用的代码,同时减少类型转换错误的可能性。

二、泛型的语法

        在Java中,泛型通过使用尖括号(<>)来声明类型参数,并可以在类、接口和方法中使用。以下是一些常见的泛型语法示例:

  • 声明一个泛型类:class MyClass<T> {}
  • 声明一个泛型接口:interface MyInterface<T> {}
  • 声明一个泛型方法:public <T> void myMethod(T param) {}

三、泛型类和泛型接口

        泛型类和泛型接口可以在声明时指定一个或多个类型参数,并在类或接口的成员中使用这些参数。示例代码如下:

class Box<T> {private T item;public void setItem(T item) {this.item = item;}public T getItem() {return item;}
}interface List<T> {void add(T item);T get(int index);
}

四、泛型方法

        泛型方法可以在方法的声明中使用类型参数,使得方法可以接受不同类型的参数,并返回相应的类型。示例代码如下:

public <T> void printArray(T[] array) {for (T element : array) {System.out.println(element);}
}public <T extends Comparable<T>> T findMax(T[] array) {T max = array[0];for (int i = 1; i < array.length; i++) {if (array[i].compareTo(max) > 0) {max = array[i];}}return max;
}

五、通配符和上界限定

        通配符(Wildcard)和上界限定(Upper Bounded)是泛型中常用的概念,它们可以增加泛型的灵活性。示例代码如下:

public void processList(List<?> list) {for (Object item : list) {// 处理列表中的元素}
}public double sumOfList(List<? extends Number> list) {double sum = 0.0;for (Number number : list) {sum += number.doubleValue();}return sum;
}

六、类型擦除和泛型的限制

        在Java中,泛型的类型信息在运行时会被擦除,这是为了保持与旧版本Java代码的兼容性。这也导致了一些泛型的限制,如无法创建泛型数组和无法直接使用基本数据类型作为类型参数。

七、泛型的优势和应用场景

        使用泛型可以提高代码的类型安全性,减少类型转换的错误和冗余代码。泛型广泛应用于集合类、数据结构和算法等领域。

相关文章:

  • python 爬虫 m3u8 视频文件 加密解密 整合mp4
  • adb命令学习记录
  • 软件崩溃时Visual Studio中看不到有效的调用堆栈,使用Windbg动态调试去分析定位
  • 大数据Vue项目必备|Window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)
  • c++ 冒泡排序
  • SpringBoot集成swagger2配置权限认证参数
  • 《地理信息系统原理》笔记/期末复习资料(13. 地理信息系统的发展趋势)
  • 持续集成交付CICD:使用Maven命令上传Nexus制品
  • 多合一iPhone 解锁工具:iMyFone LockWiper iOS
  • 专栏十五:omicverse在单细胞分析中的实际使用体验和小改动
  • 利用python编写简易POC脚本
  • KMP算法数组下标从0和数组下标从1开始
  • Windows 批量删除文件简单方法
  • k8s 安装 Longhorn
  • Java设计模式-单例(Singleton)设计模式的概述及实现
  • Bytom交易说明(账户管理模式)
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES6核心特性
  • Fastjson的基本使用方法大全
  • Java 内存分配及垃圾回收机制初探
  • java取消线程实例
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • OSS Web直传 (文件图片)
  • Sass 快速入门教程
  • spring + angular 实现导出excel
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue.js框架原理浅析
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 半理解系列--Promise的进化史
  • 测试开发系类之接口自动化测试
  • 初识MongoDB分片
  • 对象管理器(defineProperty)学习笔记
  • 高性能JavaScript阅读简记(三)
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简单数学运算程序(不定期更新)
  • 前端设计模式
  • 设计模式走一遍---观察者模式
  • 小程序开发中的那些坑
  • 最近的计划
  • PostgreSQL之连接数修改
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云移动端播放器高级功能介绍
  • 选择阿里云数据库HBase版十大理由
  • #pragma预处理命令
  • #QT项目实战(天气预报)
  • $$$$GB2312-80区位编码表$$$$
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (+4)2.2UML建模图
  • (007)XHTML文档之标题——h1~h6
  • (C语言)球球大作战
  • (C语言)字符分类函数
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (数据结构)顺序表的定义
  • (四)库存超卖案例实战——优化redis分布式锁