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

如何声明泛型函数在Java中?

发布时间:2023-05-21 22:50:34

在Java中,声明泛型函数可以通过在函数的名称和参数列表之间添加尖括号,其中尖括号中包含一个类型参数的声明。例如,下面是一个简单的泛型函数,它接受一个类型参数T,并将其作为返回类型:

public <T> T identity(T element) {
    return element;
}

在这个例子中,尖括号中的T表示类型参数,在函数的主体中,T被用作返回类型和参数类型。这使得该函数可以接受任何类型的参数,并返回一个相同的类型。

泛型函数可以有多个类型参数,例如:

public <K, V> V getValue(Map<K, V> map, K key) {
    return map.get(key);
}

在这个例子中,函数的 个类型参数K被用来指定映射的键类型,第二个类型参数V被用来指定映射的值类型。这个函数接受一个Map对象和一个键,返回映射中与该键关联的值。由于该函数使用类型参数来指定键和值的类型,因此可以适用于任何类型的Map对象。

声明泛型函数的方法与声明泛型类的方法类似。在泛型函数的主体中,可以使用类型参数来指定参数类型、返回类型和局部变量类型。例如,下面是一个简单的泛型函数,它接受一个类型参数T和另一个参数n,并返回一个长度为n的T类型的数组:

public <T> T[] createArray(int n, T element) {
    T[] array = (T[]) new Object[n];
    for (int i = 0; i < n; i++) {
        array[i] = element;
    }
    return array;
}

在这个例子中,类型参数T被用作数组元素的类型,使用Object数组来创建泛型数组,并将其转换为T类型。

在Java中,泛型函数的声明允许使用任何Java类型,包括泛型类型和通配符类型。例如,下面是一个例子,演示如何声明一个泛型函数,它接受一个List对象和一个Predicate对象,并返回一个子列表,其中包含与Predicate对象匹配的所有元素:

public static <T> List<T> filter(List<T> list, Predicate<? super T> predicate) {
    List<T> result = new ArrayList<>();
    for (T element : list) {
        if (predicate.test(element)) {
            result.add(element);
        }
    }
    return result;
}

在这个例子中,类型参数T被用来指定List中元素的类型,并且Predicate对象使用通配符类型来表示匹配任何T的子类型。这意味着函数可以接受任何类型的List和Predicate对象,只要Predicate对象可以与List中的元素进行匹配。

总之,在Java中,声明泛型函数的方法是在函数名称和参数列表之间添加尖括号,并在其中包含一个或多个类型参数的声明。泛型函数可以使用类型参数来指定参数类型、返回类型和局部变量类型,可以使用任何Java类型,包括泛型类型和通配符类型。