java泛型类和泛型方法

Java泛型类和泛型方法是一种在编译时进行类型检查的机制,它可以帮助我们在编写代码时避免类型转换异常和提高代码的可读性和安全性,下面我们来详细了解一下Java泛型类和泛型方法的定义和使用。

java泛型类和泛型方法
(图片来源网络,侵删)

泛型类

1、定义泛型类

泛型类是使用类型参数(type parameter)定义的类,类型参数用尖括号(<>)括起来,放在类名后面,我们定义一个泛型类Box,它有一个类型参数T

public class Box<T> {
    private T object;
    public void set(T object) {
        this.object = object;
    }
    public T get() {
        return object;
    }
}

2、使用泛型类

使用泛型类时,我们需要为类型参数指定具体的类型,我们可以创建一个Box<String>对象,表示这个Box只能存储String类型的数据:

Box<String> box = new Box<>();
box.set("Hello, World!");
String str = box.get();

泛型方法

1、定义泛型方法

泛型方法是使用类型参数(type parameter)定义的方法,类型参数用尖括号(<>)括起来,放在方法返回值前面,我们定义一个泛型方法printList,它接受一个泛型列表作为参数:

public static <T> void printList(List<T> list) {
    for (T item : list) {
        System.out.println(item);
    }
}

2、使用泛型方法

使用泛型方法时,我们可以为类型参数指定具体的类型,也可以让编译器自动推断类型参数,我们可以调用printList方法打印一个整数列表和一个字符串列表:

List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);
List<String> strList = Arrays.asList("A", "B", "C", "D", "E");
printList(intList); // 输出:1 2 3 4 5
printList(strList); // 输出:A B C D E

泛型的通配符和边界

1、通配符(Wildcard)

通配符(?)表示未知的类型参数,我们可以使用通配符来限制泛型方法的参数类型,我们可以定义一个泛型方法printElement,它接受一个包含任意类型元素的列表作为参数:

public static void printElement(List<?> list) {
    for (Object item : list) {
        System.out.println(item);
    }
}

2、边界(Bound)

边界用于限制类型参数的范围,我们可以使用关键字extendssuper来指定上界或下界,我们可以定义一个泛型方法max,它接受一个数字列表作为参数,并返回列表中的最大值:

public static <T extends Number> T max(List<T> list) {
    T max = null;
    for (T item : list) {
        if (max == null || item.doubleValue() > max.doubleValue()) {
            max = item;
        }
    }
    return max;
}

Java泛型类和泛型方法可以帮助我们在编译时进行类型检查,提高代码的可读性和安全性,通过使用类型参数、通配符和边界,我们可以灵活地定义和操作不同类型的数据。