在Java编程中,尖括号 <
和 >
主要用于泛型(Generics)。泛型是JDK 5.0引入的一个新特性,它允许在定义类、接口和方法时使用类型参数(type parameters)。类型参数在实际使用泛型时会被具体的类型替换。
尖括号 < >
在泛型中有几个主要的应用场景:
-
声明泛型类型:
当你声明一个泛型类或接口时,你会在类或接口名后使用尖括号来指定类型参数。public class Box<T> { private T t; public void set(T t) { this.t = t; } public T get() { return t; } }
在这个例子中,
Box
是一个泛型类,它有一个类型参数T
。 -
实例化泛型类或接口:
当你创建泛型类或接口的实例时,你需要使用尖括号来指定实际的类型参数。Box<Integer> integerBox = new Box<>(); Box<String> stringBox = new Box<>();
在这里,
Box<Integer>
和Box<String>
是使用具体类型(Integer
和String
)来实例化泛型类Box
的例子。 -
泛型方法:
你还可以在方法中使用泛型。这时,方法声明中的尖括号用来指定类型参数。public static <T> void printArray(T[] array) { for (T item : array) { System.out.print(item + " "); } System.out.println(); } Integer[] intArray = {1, 2, 3, 4, 5}; printArray(intArray); // 输出:1 2 3 4 5 String[] stringArray = {"Hello", "World", "Java", "Generics"}; printArray(stringArray); // 输出:Hello World Java Generics
printArray
方法是一个泛型方法。它使用<T>
来声明一个类型参数T
,这意味着T
可以代表任何类型。方法接受一个类型为T[]
(即T
类型的数组)的参数,并打印出数组中的每一个元素。<T>
:尖括号中的T
是一个类型参数,它代表一个未知的类型。你可以在方法签名中用它来声明参数的类型、返回类型或局部变量类型。T[] array
:这是方法的参数,表示一个T
类型的数组。由于T
是泛型类型,这个数组可以包含任何类型的元素。泛型方法的调用不需要指定类型参数,因为编译器会根据传递给方法的实际参数类型来自动推断类型参数。在上面的例子中,我们分别传递了一个Integer
类型的数组和一个String
类型的数组给printArray
方法。尽管方法本身没有为T
指定具体的类型,编译器能够根据传递给方法的实际参数自动推断出T
应该代表Integer
或String
,并生成相应的代码。这种灵活性是泛型方法的一大优势,它使得我们可以编写更加通用和可重用的代码。 -
通配符:
在泛型中,尖括号还用于通配符(wildcards),表示未知的类型。这在处理泛型集合时特别有用。List<?> unknownList = new ArrayList<>(); // 表示一个包含未知类型的元素的列表 List<? extends Number> numberList = new ArrayList<>(); // 表示一个包含Number类型或其子类型的元素的列表 List<? super Integer> superList = new ArrayList<>(); // 表示一个包含Integer类型或其父类型的元素的列表