Java泛型方法声明问号

1. 什么是Java泛型方法

Java泛型方法是指在方法声明中使用泛型类型参数的方法。泛型类型参数使用问号(?)表示,表示可以是任意类型。泛型方法允许在编译时检查方法参数和返回类型的类型安全性,同时提供了更大的灵活性。

2. 泛型方法的声明

泛型方法的声明包含以下几个部分:

public <T> void methodName(T param) {
    // 方法体
}
  • <T>:定义了一个类型参数T,可以是任意合法的Java标识符。
  • void:方法的返回类型,可以是任意的Java类型。
  • methodName:方法的名称,可以是任意合法的Java标识符。
  • (T param):方法的参数列表,可以接受任意类型的参数。

3. 泛型方法的使用

泛型方法可以用于任意类型的方法调用,包括基本类型和引用类型。下面是一些使用泛型方法的例子:

3.1 泛型方法的调用

public class GenericMethodExample {
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.println(element);
        }
    }
    
    public static void main(String[] args) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        String[] stringArray = {"Hello", "World"};
        
        printArray(intArray);
        printArray(stringArray);
    }
}

上述例子中,printArray方法接受一个泛型类型的数组,并使用增强的for循环遍历数组并打印每个元素。在main方法中,分别传入了整数数组和字符串数组进行调用。

3.2 泛型方法的返回类型

public class GenericMethodExample {
    public static <T> T getFirstElement(T[] array) {
        if (array.length > 0) {
            return array[0];
        } else {
            return null;
        }
    }
    
    public static void main(String[] args) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        String[] stringArray = {"Hello", "World"};
        
        Integer firstInt = getFirstElement(intArray);
        String firstString = getFirstElement(stringArray);
        
        System.out.println("First Integer: " + firstInt);
        System.out.println("First String: " + firstString);
    }
}

上述例子中,getFirstElement方法接受一个泛型类型的数组,并返回数组的第一个元素。在main方法中,分别传入了整数数组和字符串数组进行调用,并将返回结果赋值给不同的变量进行打印。

4. 泛型方法的类型限定

泛型方法还可以使用类型限定,限制泛型类型参数的范围。类型限定可以是接口、类或者其他泛型类型参数。

public class GenericMethodExample {
    public static <T extends Number> double getAverage(T[] array) {
        double sum = 0;
        for (T element : array) {
            sum += element.doubleValue();
        }
        return sum / array.length;
    }
    
    public static void main(String[] args) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        Double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5};
        
        double intAvg = getAverage(intArray);
        double doubleAvg = getAverage(doubleArray);
        
        System.out.println("Integer Average: " + intAvg);
        System.out.println("Double Average: " + doubleAvg);
    }
}

上述例子中,getAverage方法接受一个泛型类型的数组,并计算数组元素的平均值。通过使用extends关键字将泛型类型参数限定为Number类的子类,可以确保数组元素是数字类型。在main方法中,分别传入了整数数组和浮点数数组进行调用,并将返回结果赋值给不同的变量进行打印。

5. 泛型方法的优点

泛型方法的优点主要有以下几个方面:

  • 类型安全:泛型方法在编译时可以检查方法参数和返回类型的类型安全性