首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法在泛型方法中提供任意数量的类型?

是的,可以使用Java中的可变参数和通配符来实现在泛型方法中提供任意数量的类型。

在泛型方法中,可以使用可变参数来接收任意数量的类型。可变参数使用省略号(...)表示,在方法的参数列表中放置在类型后面。例如:

代码语言:txt
复制
public static <T> void printArray(T... array) {
    for (T item : array) {
        System.out.print(item + " ");
    }
    System.out.println();
}

在上面的例子中,泛型方法printArray可以接收任意数量的类型T的参数。使用时,可以传递一个或多个T类型的参数,甚至可以传递一个T类型的数组。例如:

代码语言:txt
复制
printArray(1, 2, 3); // 输出:1 2 3
printArray("Hello", "World"); // 输出:Hello World
printArray(1.5, 2.5, 3.5); // 输出:1.5 2.5 3.5

Integer[] numbers = {1, 2, 3, 4};
printArray(numbers); // 输出:1 2 3 4

此外,如果想要限制可变参数的类型范围,可以使用通配符。通配符使用问号(?)表示,可以是无限制通配符(?)、上界通配符(? extends T)或下界通配符(? super T)。

  • 无限制通配符(?):表示可以是任意类型。
  • 上界通配符(? extends T):表示可以是T类型或T的子类。
  • 下界通配符(? super T):表示可以是T类型或T的父类。

例如,如果要限制可变参数只能是Number类型及其子类,可以使用上界通配符:

代码语言:txt
复制
public static void printNumbers(List<? extends Number> numbers) {
    for (Number number : numbers) {
        System.out.print(number + " ");
    }
    System.out.println();
}

上面的例子中,printNumbers方法接收一个List,该List中的元素类型可以是Number或Number的子类。例如:

代码语言:txt
复制
List<Integer> integerList = Arrays.asList(1, 2, 3);
List<Double> doubleList = Arrays.asList(1.5, 2.5, 3.5);

printNumbers(integerList); // 输出:1 2 3
printNumbers(doubleList); // 输出:1.5 2.5 3.5

总结: 在泛型方法中提供任意数量的类型可以通过可变参数和通配符来实现。可变参数(可变长度参数列表)允许在方法中接受任意数量的参数,而通配符(包括无限制通配符、上界通配符和下界通配符)可以用来限制参数的类型范围,以便更加灵活地处理不同类型的参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券