java基础面试题:Java 泛型了解么?什么是类型擦除?介绍一下常用的通配符?

Java泛型是一种在编译时提供类型安全性的机制,允许在定义类、接口和方法时使用参数化类型。通过使用泛型,可以在编译时检查和保证程序在类型方面的正确性,并提供更好的代码重用性和可读性。

类型擦除(Type Erasure)是Java泛型的一项重要特性。它表示在编译时,泛型类型信息会被擦除,并在运行时使用原始类型来代替。这是由于Java虚拟机的设计限制,无法直接支持泛型类型的实例化和访问。类型擦除确保了泛型类型与非泛型类型可以在运行时无缝地交互,但也导致了一些限制,比如无法在运行时获取泛型类型的具体信息。

在Java泛型中,常用的通配符有两种:

  1. 问号通配符(Wildcard):问号通配符使用"?"表示,表示可以匹配任意类型。它分为上界通配符和无界通配符两种形式:

    • 上界通配符(Upper Bounded Wildcard):使用形如"? extends 类型"的通配符,表示可以匹配类型参数的某个子类型以及该子类型的子类型。它允许读取类型参数的值,但不能写入。
    • 无界通配符(Unbounded Wildcard):使用"?"表示,表示可以匹配任意类型参数。它既可以读取类型参数的值,也可以写入。
  2. 限定通配符(Bounded Wildcard):限定通配符使用形如"? super 类型"的通配符,表示可以匹配类型参数的某个超类型以及该超类型的父类型。它允许写入类型参数的值,但只能读取Object类型的值。

通配符的使用可以提高泛型代码的灵活性。它允许在泛型类型的上下文中处理不同类型的对象,而不需要具体指定类型参数。通配符常用于方法参数、集合类型和通用算法中,以处理不同类型的对象。

泛型类和泛型方法:Java泛型允许定义泛型类和泛型方法。泛型类使用类型参数来表示类中的某个类型,例如class MyClass {}。泛型方法是在方法定义中使用类型参数,例如public void myMethod(T param) {}。泛型类和泛型方法使得可以在编写代码时指定类型参数,提高了代码的类型安全性和重用性。

泛型和类型转换:泛型在编译时提供类型安全性,可以防止一些类型错误。但由于类型擦除的存在,有些类型转换仍然需要谨慎处理。在使用泛型时,需要注意类型转换的正确性,并使用强制类型转换(cast)来处理类型转换问题。

通配符捕获:通配符捕获(Wildcard Capture)是指在使用通配符时,将通配符捕获为一个确定的类型,以便进行进一步的操作。通配符捕获通常发生在方法调用中,当使用通配符作为方法参数时。通过捕获通配符,可以确保类型的一致性,并避免出现类型不匹配的错误。

需要注意的是,通配符只能用于读取和写入对象,而不能用于实例化泛型类或调用泛型方法。虽然Java泛型提供了更好的类型安全性和代码重用性,但也需要谨慎使用。在设计和使用泛型时,需要考虑类型边界、通配符的选择、类型转换的正确性等因素,以确保代码的正确性和性能

你可能感兴趣的:(java,开发语言)