Java接受一个泛型参数

Java是一种面向对象的编程语言,支持泛型(Generic)类型。泛型允许我们在定义类、接口或方法时,使用一个占位符来表示类型,然后在实际使用时指定具体的类型。这种方式可以增加代码的灵活性和可重用性。

什么是泛型?

泛型是Java中的一个重要概念,它允许我们定义一个可以适用于多种类型的类、接口或方法。使用泛型可以在编译时进行类型检查,避免在运行时出现类型转换异常。泛型类型参数用尖括号<>括起来,放在类名或方法名的后面。

泛型类

泛型类是指具有一个或多个类型参数的类。通过使用泛型类,我们可以创建可以适用于多种类型的对象。

下面是一个示例代码:

public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

在上面的代码中,Box类使用了一个泛型类型参数<T>。这个类型参数可以在类的内部作为一种普通类型来使用,用来声明属性、方法参数和返回值类型。

我们可以使用Box类来创建不同类型的盒子对象:

Box<Integer> intBox = new Box<>();
intBox.setContent(10);
int value = intBox.getContent(); // 行内代码:int

在上面的代码中,我们创建了一个Box对象,其中的类型参数指定为Integer。我们可以将整数类型的值存入盒子中,并通过getContent方法获取盒子中的内容。

泛型方法

除了可以在类中定义泛型类型参数,我们还可以在方法中定义泛型类型参数。这样的方法被称为泛型方法。

下面是一个示例代码:

public class MathUtils {
    public static <T extends Number> double average(T[] numbers) {
        double sum = 0;
        for (T number : numbers) {
            sum += number.doubleValue();
        }
        return sum / numbers.length;
    }
}

在上面的代码中,average方法是一个泛型方法,它使用了一个泛型类型参数<T>。这个类型参数被限制为Number或其子类。

我们可以使用average方法来计算一组数字的平均值:

Integer[] numbers = {1, 2, 3, 4, 5};
double avg = MathUtils.average(numbers); // 行内代码:double

在上面的代码中,我们使用了一个Integer类型的数组作为方法的参数,并通过泛型类型推断,自动确定了泛型类型参数<T>的具体类型。

泛型接口

泛型接口是指具有一个或多个类型参数的接口。通过使用泛型接口,我们可以定义可以适用于多种类型的实现类。

下面是一个示例代码:

public interface Collection<E> {
    void add(E element);
    void remove(E element);
    boolean contains(E element);
}

在上面的代码中,Collection接口使用了一个泛型类型参数<E>。这个类型参数可以在接口的方法中作为一种普通类型来使用,用来声明方法参数和返回值类型。

我们可以实现Collection接口来创建不同类型的集合类:

public class ArrayList<E> implements Collection<E> {
    private List<E> elements = new ArrayList<>();

    public void add(E element) {
        elements.add(element);
    }

    public void remove(E element) {
        elements.remove(element);
    }

    public boolean contains(E element) {
        return elements.contains(element);
    }
}

在上面的代码中,ArrayList类实现了Collection接口,并指定了泛型类型参数<E>为集合元素的类型。通过实现Collection接口,我们可以创建不同类型的集合对象。

总结

泛型是Java中一个非常重要的特性,它允许我们编写更通用、可重用的代码。通过使用泛型,我们可以定义可以适用于多种类型的类、接口或方法,并在实