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

Java中的泛型函数及其使用方法

发布时间:2023-06-18 15:11:20

Java中的泛型函数是指在函数定义时,使用了泛型类型作为函数参数或返回值类型的函数。通过使用泛型函数,可以提高函数的复用性和灵活性,减少代码冗余,提高代码的可读性。

Java泛型函数的声明格式如下:

public <T> 返回值类型 函数名(参数列表){
    //函数体
}

其中,<T>表示声明一个泛型类型T,可以根据实际情况替换成其他泛型类型(如<E><K>等等),返回值类型表示函数返回值的类型,函数名表示函数的名称,参数列表表示函数的参数。

下面我们来看一些泛型函数的使用方法。

1. 泛型函数作为参数

可以将泛型函数作为其他函数的参数传递。例如,下面的代码中,printArray函数是一个泛型函数,可以打印任意类型的数组。

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

public static void main(String[] args) {
    Integer[] intArray = {1,2,3};
    Double[] doubleArray = {1.0,2.0,3.0};
    Character[] charArray = {'a','b','c'};

    printArray(intArray); //调用打印整型数组的函数
    printArray(doubleArray); //调用打印双精度数组的函数
    printArray(charArray); //调用打印字符数组的函数
}

在调用printArray函数时,可以传递不同类型的数组参数,并打印出对应的结果。

2. 泛型函数作为返回值类型

可以将泛型函数作为其他函数的返回值类型。例如,下面的代码中,getMax函数是一个泛型函数,可以返回任意类型的最大值。

public static <T extends Comparable<T>> T getMax(T[] array){
    T max = array[0];
    for(int i=1;i<array.length;i++){
        if(max.compareTo(array[i])<0){
            max = array[i];
        }
    }
    return max;
}

public static void main(String[] args) {
    Integer[] intArray = {1,2,3};
    Double[] doubleArray = {1.0,2.0,3.0};
    Character[] charArray = {'a','b','c'};

    System.out.println(getMax(intArray)); //返回整型数组中最大的数
    System.out.println(getMax(doubleArray)); //返回双精度数组中最大的数
    System.out.println(getMax(charArray)); //返回字符数组中最大的数
}

在调用getMax函数时,可以传递不同类型的数组参数,并返回对应类型的最大值。

需要注意的是,在函数定义时,使用了<T extends Comparable<T>>的格式,表示声明一个泛型类型T,并限定T的类型必须是实现了Comparable接口的类型。这样才能使用compareTo方法比较大小。

3. 多重泛型

Java中的泛型函数还支持多重泛型,即在函数定义时,可以声明多个泛型类型。例如,下面的代码中,getKeyValue函数是一个多重泛型函数,可以返回任意两种不同类型的键值对。

public static <K,V> Map.Entry<K,V> getKeyValue(K key,V value){
    return new AbstractMap.SimpleEntry<>(key,value);
}

public static void main(String[] args) {
    Map.Entry<String,Integer> entry1 = getKeyValue("a",1);
    Map.Entry<Integer,String> entry2 = getKeyValue(2,"b");
}

在调用getKeyValue函数时,可以传递不同类型的键值对参数,并返回对应的Map.Entry对象。

需要注意的是,在函数定义时,使用了<K,V>的格式声明了两个泛型类型,这样才能接收不同类型的键值对参数。

以上就是Java中泛型函数的使用方法。需要注意的是,在使用泛型函数时,应根据具体情况声明泛型类型,并实现泛型类型的限定条件,以确保函数的正确性和可靠性。