欢迎访问宙启技术站
智能推送

Java中如何定义带泛型参数的函数?

发布时间:2023-06-23 11:34:03

在Java中,定义一个带泛型参数的函数需要使用泛型,也就是在函数名之后的括号中使用尖括号定义类型参数。一般情况下,这个类型参数可以是任何有效的Java类型,包括类、接口、数组或基本类型。

下面假设我们要定义一个简单的带泛型参数的函数:

public static <T> void print(T[] arr) {
    for (T elem : arr) {
        System.out.print(elem + " ");
    }
    System.out.println();
}

这个函数的作用是将一个任意类型的数组打印出来。

该函数定义如下:

1. 函数名为 print

2. 使用 <T> 定义一个类型参数 T,这个参数用于指定数组中元素的类型。

3. 函数接收一个类型为 T 的数组作为参数。

4. 函数体循环遍历数组,并将每个元素输出到控制台上。

在这个函数定义中,我们使用了泛型类型 T。这个类型在函数体中被用于表示数组中元素的类型。这个类型的值是在函数调用时传入的。例如,如果我们要打印一个整数数组,则可以这样调用函数:

Integer[] arr = {1, 2, 3};
print(arr);

这里,T 被实例化为 Integer。通过这种方式,我们可以定义许多能够处理不同类型数据的通用函数。

除了上述定义方式,还可以使用通配符来定义泛型参数。通配符一般有三种形式:

1. <?>:未指定类型的通配符。

2. <? extends T>:指定上界为 T 的通配符。

3. <? super T>:指定下界为 T 的通配符。

例如,我们可以使用 <? extends Number> 来指定只能接收 Number 的子类,如 IntegerFloat 或者 Double 等。

public static void sum(List<? extends Number> list) {
    double sum = 0;
    for (Number n : list) {
        sum += n.doubleValue();
    }
    System.out.println(sum);
}

这个函数的作用是计算一个只包含数字的列表中所有元素的和。

该函数定义如下:

1. 函数名为 sum

2. 参数类型为 List<? extends Number>,这个类型使用通配符 <? extends Number> 指定了只允许接收 Number 或者其子类的列表。

3. 函数体遍历给定的列表,将每个元素转换成 double 类型并加到 sum 变量中,并最终输出 sum 的值。

通过上述方式可以定义许多通用的带泛型参数的函数。这些函数可以处理不同类型的数据,并且能够为我们节省开发时间和提高代码的复用性。