Java 泛型是一种在编写具有通用性的类、接口和方法时使用的强大工具,它允许在编写代码时指定类型,提高代码的灵活性和重用性。以下是 Java 泛型的一些常见用法和总结:
-
泛型类(Generic Class): 定义一个包含一个或多个类型参数的类,这些类型参数可以在实例化类时指定具体的类型。
public class MyGenericClass<T> { private T data; public MyGenericClass(T data) { this.data = data; } public T getData() { return data; } }
-
泛型接口(Generic Interface): 类似于泛型类,泛型接口也可以包含一个或多个类型参数。
public interface MyGenericInterface<T> { T processData(T input); }
-
泛型方法(Generic Method): 在方法上使用泛型,可以使方法独立于类的泛型参数。
public <T> T myGenericMethod(T value) { // 方法实现 return value; }
-
通配符(Wildcards): 使用通配符可以增强泛型的灵活性。通配符有上界通配符,下界通配符。
public void processList(List<? extends Number> numbers) { // 处理数字列表 }
-
泛型限定(Bounds): 通过使用泛型限定,可以指定泛型类型必须是某个类的子类或实现了某个接口。
public <T extends Number> void processNumbers(List<T> numbers) { // 处理数字列表 }
-
类型擦除(Type Erasure): Java 泛型在编译时使用擦除来实现,运行时类型信息被擦除,但编译器通过类型擦除来强制执行类型安全。
-
泛型和继承: 泛型与继承结合使用时,需要注意泛型类型的限定和通配符的使用,以确保类型安全。
public class Box<T extends Number> { // ... }
-
泛型构造方法(Generic Constructor): 泛型可以用于构造方法,使得在创建对象时指定类型。
public class MyClass<T> { private T data; public <U> MyClass(U data) { // 构造方法实现 } }