Java 通配符 ?

发布时间:2024年01月02日

通配符的基本概念

? Java中的通配符?用于泛型编程。它表示未知的类型,通常用于声明泛型类型、方法参数或返回类型,使得代码可以更加通用和灵活。

通配符的分类

  1. 无界通配符(Unbounded Wildcard)

    • ??表示任何类型都是合法的。
    • 例如,List<?>?表示“具有任何类型元素的列表”。
  2. 有界通配符(Bounded Wildcard)

    • ? extends Type?表示类型的上界,意味着接受Type或者它的任何子类。用例详细解
    • ? super Type?表示类型的下界,意味着接受Type或者它的任何父类。用例详细解
    • 例如,List<? extends Number>?表示“具有Number或其子类类型元素的列表”。

通配符的使用场景

  1. 作为参数类型

    • 当你想要编写一个能够接受泛型类型而又不关心具体类型参数的方法时,可以使用通配符。
    • 例如,编写一个打印列表中所有元素的方法:void printList(List<?> list) { /* ... */ }
  2. 泛型类和接口

    • 在声明泛型类或接口时使用通配符,以提供更大的灵活性。
    • 例如,声明一个可以与任何类型的Comparator一起工作的方法:void sort(List<?> list, Comparator<?> c) { /* ... */ }

通配符的限制

  • 不能实例化通配符类型的对象。
  • 无界通配符类型的对象不能添加除了null之外的任何元素。
  • 有界通配符可能会限制某些方法的使用,因为编译器只知道类型的上界或下界。

通配符和类型擦除

  • 在运行时,泛型信息会被擦除,但通配符有助于在编译时期提供类型安全。

通配符的好处

  • 提高API的灵活性。
  • 使得代码更加通用,能够处理更广泛的数据类型。
  • 有助于减少代码中的强制类型转换。

? 通配符?是Java泛型中的一个关键概念,通过其灵活的使用,可以编写出更加通用和类型安全的代码。

文章来源:https://blog.csdn.net/u014745465/article/details/135329911
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。