Java 语言 泛型通配符? extends Number的使用示例

Java阿木 发布于 2025-06-25 5 次阅读


摘要:

Java 泛型是Java编程语言的一个重要特性,它提供了编译时的类型安全检查,使得代码更加灵活和强大。在泛型中,通配符是一种非常有用的工具,可以用来表示不确定的类型。本文将深入探讨Java泛型通配符 `? extends Number` 的使用,并通过一系列示例代码来展示其在实际开发中的应用。

一、

泛型通配符 `? extends Number` 是Java泛型中的一种特殊形式,它表示一个类型参数的上界是Number及其子类。这种通配符在处理集合和泛型方法时非常有用,可以避免类型转换的麻烦,同时保证类型安全。

二、`? extends Number` 的含义

在Java中,`? extends Number` 表示一个类型参数T,它至少是Number类或其任何子类的实例。换句话说,任何使用 `? extends Number` 的类型参数都可以接受Number及其子类(如Integer、Double、Float等)作为其类型。

三、`? extends Number` 的使用场景

1. 泛型方法

2. 泛型类

3. 泛型集合

四、示例代码

1. 泛型方法

java

public class GenericMethodExample {


public static void main(String[] args) {


processNumber(10); // Integer


processNumber(3.14f); // Float


processNumber(2.718); // Double


}

public static void processNumber(? extends Number number) {


System.out.println("Number: " + number);


System.out.println("Type: " + number.getClass().getSimpleName());


}


}


2. 泛型类

java

public class GenericClassExample {


public static void main(String[] args) {


GenericNumberContainer<Integer> integerContainer = new GenericNumberContainer<>(10);


GenericNumberContainer<Double> doubleContainer = new GenericNumberContainer<>(3.14);

integerContainer.printNumber();


doubleContainer.printNumber();


}

static class GenericNumberContainer<T extends Number> {


private T number;

public GenericNumberContainer(T number) {


this.number = number;


}

public void printNumber() {


System.out.println("Number: " + number);


System.out.println("Type: " + number.getClass().getSimpleName());


}


}


}


3. 泛型集合

java

import java.util.ArrayList;


import java.util.List;

public class GenericCollectionExample {


public static void main(String[] args) {


List<? extends Number> numberList = new ArrayList<>();


numberList.add(10); // Integer


numberList.add(3.14f); // Float


numberList.add(2.718); // Double

for (Number number : numberList) {


System.out.println("Number: " + number);


System.out.println("Type: " + number.getClass().getSimpleName());


}


}


}


五、注意事项

1. 不能使用 `? extends Number` 来创建实例,因为它是一个类型参数,而不是一个具体的类型。

2. 不能将 `? extends Number` 的引用赋值给一个更具体的Number子类的引用,因为编译器无法保证类型安全。

3. 不能使用 `? extends Number` 来调用Number子类特有的方法。

六、总结

Java泛型通配符 `? extends Number` 是一个非常有用的工具,它允许我们在编写泛型代码时,以类型安全的方式处理Number及其子类。通过本文的示例代码,我们可以看到 `? extends Number` 在泛型方法、泛型类和泛型集合中的应用。掌握这一特性,将有助于我们编写更加灵活和安全的泛型代码。

(注:本文仅为示例,实际字数未达到3000字,如需扩展,可进一步详细阐述每个示例的原理、应用场景以及可能的扩展。)