【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。

简介: 【Java】<泛型>,在编译阶段约束操作的数据结构,并进行检查。

JAVA泛型



泛型介绍

  • ①泛型:Java泛型是一种强大的编程概念,可用于编写可重用、类型安全和通用的代码。泛型在Java中引入了类型参数,允许开发者编写可以处理不同数据类型的通用类、接口和方法。是JDK5中引入的特性,总而言之就是:可以在编译阶段约束操作的数据结构,并进行检查
  • ②泛型格式<数据类型>
  • ③泛型只能支持: 引用数据类型


使用泛型的好处

  • ①统一数据类型。(确定泛型后,传递数据时,可传递指定类型或其子类类型数据。不能传递基本数据类型。)
  • ②泛型允许开发者在编译时捕获类型错误,而不是在运行时。把运行时期的问题提前到编译期间,避免了强制类型转换可能出现的异常,这提高了代码的质量和可维护性。
  • 注意:如果我们没有通过泛型给集合指定类型,默认所有的数据都是Object类型,此时可以往集合中添加任意的数据类型,**弊端:**此时我们在获取到集合的数据时,无法使用他的特有行为(无法访问其特有的方法函数)。


真相

  • Java中的泛型是伪泛型
  • 它只有在编译阶段生效,以检查并确定类型。
  • 当数据存入集合后,进入到运行阶段,存入的数据依旧是当作Object类型来处理。在获取时又根据泛型来进行强制转换。


泛型使用

  • 使用在类后面:
  • 泛型类
  • 适用场景:当一个类中,某个变量的数据类型不确定,可定义带泛型的类,做到约束,检查变量类型的作用。
  • 格式:修饰符 class 类名<类型>{}
ArrayList<String> stringList = new ArrayList<>();
ArrayList<Integer> intList = new ArrayList<>();

  • 使用在方法上:
  • 泛型方法
  • 使用场景:方法中形参类型不确定时,可以使用类名后面定义的泛型,即泛型类,当然也可以也可以在方法上定义泛型(仅本方法使用)。
  • 格式:修饰符 <类型>返回值类型 方法名(类型 类型名){}
public <T> T getFirstElement(List<T> list) {
    return list.get(0);
}

  • 用在接口后面:
  • 泛型接口
  • 格式:修饰符 interface 接口名<类型>{}
  • 如何使用一个带泛型的接口:
  • ①实现类给出具体类型。
  • ②实现类眼神泛型,创建对象时再确定。


泛型的继承和通配符

  • 泛型不具备继承性,但是数据具备继承性。
  • 通配符? —— 通配符是一种用于表示不确定类型的类型参数。? 用于表示通配符。通配符可以在方法参数中用于接受多个类型的参数
  • 上限通配符:? entends E:可以传递E或者E所有的子类类型。
  • 下限通配符:? super E:可以传递E或者E所有的父类类型。




目录
相关文章
|
2月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
226 10
|
7月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
232 1
|
4月前
|
安全 Java API
在Java中识别泛型信息
以上步骤和示例代码展示了怎样在Java中获取泛型类、泛型方法和泛型字段的类型参数信息。这些方法利用Java的反射API来绕过类型擦除的限制并访问运行时的类型信息。这对于在运行时进行类型安全的操作是很有帮助的,比如在创建类型安全的集合或者其他复杂数据结构时处理泛型。注意,过度使用反射可能会导致代码难以理解和维护,因此应该在确有必要时才使用反射来获取泛型信息。
209 11
|
5月前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
285 3
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
144 1
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
234 2
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
266 2
|
7月前
|
存储 Java 编译器
Java 中 .length 的使用方法:深入理解 Java 数据结构中的长度获取机制
本文深入解析了 Java 中 `.length` 的使用方法及其在不同数据结构中的应用。对于数组,通过 `.length` 属性获取元素数量;字符串则使用 `.length()` 方法计算字符数;集合类如 `ArrayList` 采用 `.size()` 方法统计元素个数。此外,基本数据类型和包装类不支持长度属性。掌握这些区别,有助于开发者避免常见错误,提升代码质量。
736 1
|
11月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
173 5
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
211 6

热门文章

最新文章