泛型(Generics)是Java编程语言的一种特性,它允许在编译时定义类型参数化的类、接口或方法,这意味着它们可以在多种数据类型上工作,而不是只针对特定数据类型。通过使用泛型,程序员可以在编译时捕获许多常见的类型错误,从而提供更好的类型安全。
1.声明类型参数:在类、接口或方法声明的尖括号<>中声明类型参数。
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
2.使用类型参数:在类、接口或方法的实现中使用类型参数。
Box<Integer> integerBox = new Box<>();
integerBox.set(new Integer(10));
System.out.println(integerBox.get()); // 输出: 10
3.通配符:使用?
表示未知的类型。
public class Cycle<T> {
private T[] ts;
private int i;
public T next() { return ts[i++]; }
}
4.边界:使用extends
和super
关键字来限制可能的类型。
public class LoggedList<T extends Comparable<T>> { ... }
extends
和super
关键字,可以对可能的具体类型进行约束。例如,只接受Comparable
类型,或限制类型的上限和下限。?
表示未知类型,这在某些情况下非常有用,例如在创建可变参数或处理未知类型时。ArrayList<T>
、HashMap<K,V>
等。这使得集合可以存储任何类型的对象,同时保持类型安全。Box<T>
和Cycle<T>
示例。总之,Java中的泛型是一种强大的工具,它允许程序员编写更加通用、可重用和类型安全的代码。通过正确地使用泛型,可以显著提高代码质量和减少错误。