Java 泛型2025年4月21日 | 阅读 10 分钟 Java 泛型,在 J2SE 5.0 中引入,用于处理类型安全的类对象,提供了一种使用占位符来定义类、接口和方法的方式。此功能允许创建灵活且可重用的代码组件,这些组件可以在保持编译时类型安全的同时,与不同的数据类型配合使用。它通过在编译时检测错误来使代码更稳定。 在泛型出现之前,我们可以在集合中存储任何类型的对象,即非泛型。现在,泛型强制 Java 程序员存储特定类型的对象。 为什么要使用泛型?泛型解决了 Java 编程中的几个关键问题
Java 泛型的优势泛型主要有以下三个优势: 1) 类型安全: 泛型只能存储单一类型的对象。不允许存储其他对象。 没有泛型,我们可以存储任何类型的对象。 2) 无需类型转换: 对象无需进行类型转换。 在没有泛型的情况下,我们需要进行类型转换。 3) 编译时检查: 在编译时进行检查,因此不会在运行时出现问题。良好的编程策略认为,在编译时处理问题远胜于在运行时处理。 使用泛型集合的语法 使用 Java 泛型的示例 Java 泛型的完整示例在这里,我们使用了 ArrayList 类,但我们可以使用任何集合类,例如 ArrayList、LinkedList、HashSet、TreeSet、HashMap、Comparator 等。 示例编译并运行输出 element is: jai rahul jai 使用 Map 的 Java 泛型示例现在我们将使用泛型来使用 Map 元素。在这里,我们需要传递键和值。让我们通过一个简单的例子来理解它。 示例编译并运行输出 1 vijay 2 ankit 4 umesh 泛型类可以引用任何类型的类称为泛型类。在这里,我们使用 T 类型参数来创建特定类型的泛型类。 让我们看一个创建和使用泛型类的简单示例。 创建泛型类T 类型表示它可以引用任何类型(如 String、Integer 和 Employee)。您为类指定的类型将用于存储和检索数据。 使用泛型类让我们看看使用泛型类的代码。 示例输出 2 类型参数类型参数命名约定对于彻底学习泛型非常重要。常见的类型参数如下:
泛型方法与泛型类一样,我们可以创建泛型方法,该方法可以接受任何类型的参数。在这里,参数的范围仅限于声明它的方法。它允许静态方法和非静态方法。 让我们看一个打印数组元素的 Java 泛型方法的简单示例。我们在这里使用 E 来表示元素。 示例编译并运行输出 Printing Integer Array 10 20 30 40 50 Printing Character Array J A V A T P O I N T Java 泛型中的通配符?(问号)符号代表通配符元素。它表示任何类型。如果我们写 <? extends Number>,它表示 Number 的任何子类。例如,Integer、Float 和 double。现在我们可以通过任何子类对象调用 Number 类的该方法。 我们可以使用通配符作为参数、字段、返回类型或局部变量的类型。但是,不允许将通配符用作泛型方法调用、泛型类实例创建或超类型的类型参数。 让我们通过下面的例子来理解它 示例输出 drawing rectangle drawing circle drawing circle 上界通配符上界通配符的目的是减少对变量的限制。它限制未知类型为特定类型或该类型的子类型。通过声明通配符字符(“?”)后跟 extends(如果是类)或 implements(如果是接口)关键字,后跟其上界来使用它。 语法此处, ? 是一个通配符字符。 extends 是一个关键字。 Number 是 `java.lang` 包中存在的一个类。 假设我们想为 Number 及其子类型的列表(如 Integer、Double)编写方法。使用 **List<? extends Number>** 适用于类型为 Number 或其任何子类的列表,而 **List<Number>** 仅适用于类型为 Number 的列表。因此,**List<? extends Number>** 的限制比 **List<Number>** 少。 上界通配符示例在此示例中,我们使用上界通配符为 List<Integer> 和 List<Double> 编写方法。 示例编译并运行输出 displaying the sum= 30.0 displaying the sum= 70.0 无界通配符无界通配符类型表示未知类型的列表,例如 List<?>。这种方法在以下情况下可能很有用:
无界通配符示例示例编译并运行输出 displaying the Integer values 1 2 3 displaying the String values One Two Three 下界通配符下界通配符的目的是限制未知类型为特定类型或该类型的超类型。通过声明通配符字符(“?”)后跟 super 关键字,后跟其下界来使用它。 语法此处, ? 是一个通配符字符。 super 是一个关键字。 Integer 是一个包装类。 假设我们想为 Integer 及其超类型的列表(如 Number、Object)编写方法。使用 **List<? super Integer>** 适用于类型为 Integer 或其任何超类的列表,而 **List<Integer>** 仅适用于类型为 Integer 的列表。因此,**List<? super Integer>** 的限制比 **List<Integer>** 少。 下界通配符示例在此示例中,我们使用下界通配符为 List<Integer> 和 List<Number> 编写方法。 示例编译并运行输出 displaying the Integer values 1 2 3 displaying the Number values 1.0 2.0 3.0 Java 泛型的缺点
复杂性和学习曲线泛型为 Java 语言增加了复杂性,这对于开发人员正确学习和使用来说可能是一个挑战。
限制和局限性泛型带来了一些限制,这些限制可能会限制其灵活性和可用性。
下一主题Java 注解 |
我们请求您订阅我们的新闻通讯以获取最新更新。