什么是泛型通配符?
在Java中,泛型通配符是指一个未知类型的占位符。它可以用来表示任意类型,在泛型的灵活使用上发挥了重要作用。泛型通配符使用?
表示。
泛型通配符的使用方法
泛型通配符主要有三种使用方法:?
、? extends
和? super
。
1. 问号(?
)
问号通配符表示可以匹配任意类型。在使用时,可以将?
作为类型参数传入泛型类、方法或接口中。
示例代码:
public class GenericClass<T> {
private T value;
public GenericClass(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public static void main(String[] args) {
GenericClass<?> generic = new GenericClass<>("Hello");
System.out.println(generic.getValue());
}
}
上述代码中,GenericClass<?>
表示一个未知类型的泛型对象,可以赋值给任何类型的泛型。
2. ? extends
? extends
通配符表示泛型的上界限制,表示可以匹配某个类型以及其子类型。
示例代码:
public class GenericMethod {
public static <T extends Number> double sum(List<T> numbers) {
double sum = 0;
for (T number : numbers) {
sum += number.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
List<Double> doubles = Arrays.asList(1.1, 2.2, 3.3, 4.4, 5.5);
double sumOfIntegers = sum(integers);
double sumOfDoubles = sum(doubles);
System.out.println("Sum of integers: " + sumOfIntegers);
System.out.println("Sum of doubles: " + sumOfDoubles);
}
}
上述代码中,<T extends Number>
表示泛型的类型上界是Number
类或其子类,所以可以使用intValue()
、doubleValue()
等方法。
3. ? super
? super
通配符表示泛型的下界限制,表示可以匹配某个类型以及其父类型。
示例代码:
public class GenericClass {
public static void printList(List<? super Integer> list) {
for (Object element : list) {
System.out.println(element);
}
}
public static void main(String[] args) {
List<Number> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Object> objects = new ArrayList<>();
printList(numbers);
printList(objects);
}
}
上述代码中,List<? super Integer>
表示可以匹配Integer
类型以及Integer
的父类型,所以可以传递List<Number>
和List<Object>
类型的参数。
总结
在Java中,泛型通配符的使用方法有三种:?
表示任意类型,? extends
表示上界限制,? super
表示下界限制。合理使用泛型通配符可以提高代码的灵活性和重用性,是Java泛型的重要特性之一。
本文来自极简博客,作者:闪耀星辰,转载请注明原文链接:Java中的泛型通配符使用方法详解