泛型
在任何重要的软件项目中,bug都是不可避免的,仔细的规划、编程和测试可以帮助减少它们的普遍性,但是它们总会在某个地方以某种方式潜入你的代码,随着新功能的引入以及你的代码库在规模和复杂性方面的增长,这一点变得尤为明显。
幸运的是,一些错误比其他错误更容易被发现,例如,编译时错误可以在早期检测到,你可以使用编译器的错误消息来确定问题所在并立即修复它。但是,运行时错误可能会更成问题,它们并不总是立刻浮出水面,当它们出现时,它可能在程序中的某个点上,与问题的实际原因相去甚远。
泛型通过在编译时检测到更多错误来增加代码的稳定性。
为什么要使用泛型?简而言之,泛型使类型(类和接口)在定义类、接口和方法时成为参数,与方法声明中使用的更熟悉的形式参数非常相似,类型参数提供了一种使你可以使用不同的输入重用相同的代码的方法,不同之处在于形式参数的输入是值,而类型参数的输入是类型。
使用泛型的代码比非泛型代码有许多好处:
在编译时进行更强大的类型检查。
Java编译器对泛型代码应用强类型检查,并在代码违反类型安全时发出错误,修复编译时错误比修复运行时错误更容易,这很难找到。
消除数据类型转换
以下没有泛型的代码片段需要强制转换:
List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0);
当重写为使用泛型时,代码不需要强制转换:
Listlist = new ArrayList (); list.add("hello"); String s = list.get(0); // no cast
使程序员能够实现通用算法。
通过使用泛型,程序员可以实现通用算法,这些算法可以处理不同类型的集合,可以自定义,并且类型安全且易于阅读。
上一篇:自动装箱和拆箱 下一篇:泛型类型文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72928.html
Java™ 教程 Java教程是为JDK 8编写的,本页面中描述的示例和实践没有利用在后续版本中引入的改进。 Java教程是希望使用Java编程语言创建应用程序的程序员的实用指南,其中包括数百个完整的工作示例和数十个课程,相关课程组被组织成教程。 覆盖基础知识的路径 这些教程以书籍的形式提供,如Java教程,第六版,前往Amazon.com购买。 入门 介绍Java技术和安装Java开发软件并使用...
泛型类型 泛型类型是通过类型参数化的泛型类或接口,修改以下Box类以演示此概念。 一个简单的Box类 首先检查一个对任何类型的对象进行操作的非泛型Box类,它只需要提供两个方法:set,它将一个对象添加到box中,get,它将检索它: public class Box { private Object object; public void set(Object object) ...
类型推断 类型推断是Java编译器查看每个方法调用和相应声明的能力,以确定使调用适用的类型参数,推理算法确定参数的类型,如果可用,还确定分配或返回结果的类型,最后,推理算法尝试查找适用于所有参数的最具体类型。 为了说明最后一点,在下面的示例中,推断确定传递给pick方法的第二个参数是Serializable类型: static T pick(T a1, T a2) { return a2; } ...
泛型原始类型 原始类型是没有任何类型参数的泛型类或接口的名称,例如,给定Box泛型类: public class Box { public void set(T t) { /* ... */ } // ... } 要创建参数化类型的Box,请为形式类型参数T提供实际类型参数: Box intBox = new Box(); 如果省略实际的类型参数,则创建一个原始类型Box: Box...
泛型的限制 要有效地使用Java泛型,必须考虑以下限制: 无法使用基元类型实例化泛型类型 无法创建类型参数的实例 无法声明类型为类型参数的静态字段 无法对参数化类型使用强制类型转换或instanceof 无法创建参数化类型的数组 无法创建、捕获或抛出参数化类型的对象 无法重载将每个重载的形式参数类型擦除为相同原始类型的方法 无法使用基元类型实例化泛型类型 考虑以下参数化类型: class P...
阅读 2458·2023-04-25 14:54
阅读 527·2021-11-24 09:39
阅读 1768·2021-10-26 09:51
阅读 3821·2021-08-21 14:10
阅读 3457·2021-08-19 11:13
阅读 2669·2019-08-30 14:23
阅读 1777·2019-08-29 16:28
阅读 3327·2019-08-23 13:45