📜  Java泛型-类(1)

📅  最后修改于: 2023-12-03 15:16:36.074000             🧑  作者: Mango

Java泛型-类

介绍

Java泛型是一种通用编程概念,目的是通过参数化类型来增加代码的重用和类型安全。 一个类或接口,参数使用<>括起来,在Java中被称为泛型类或泛型接口。

泛型使得类和接口可以具有操作各种对象类型的能力,同时还可以提供类型检查和类型安全检查。

泛型类

泛型类定义一个类,其中至少一个方法使用泛型类型参数。

语法:

class className<T> {
    // variables, constructors, methods
}

这里 <T> 表示类型参数,T 可以替换为任何类型,例如 Integer、String 等。

泛型类可以包含泛型方法和非泛型方法。

示例

下面是一个泛型类的示例,其中 T 表示类型参数。

class MyClass<T> {
    private T myVar;

    public MyClass(T myVar) {
        this.myVar = myVar;
    }

    public void setMyVar(T myVar) {
        this.myVar = myVar;
    }

    public T getMyVar() {
        return myVar;
    }
}

这个类有一个泛型类型参数 T,它有一个构造函数和两个方法。构造函数使用 T 类型的参数,另外两个方法也使用 T 类型的参数。其中 setMyVar 方法用于设置 myVar 属性,getMyVar 方法用于获取 myVar 属性。这个类可以用来存储任何类型的数据。

使用泛型类

使用泛型类时,必须在实例化的时候指定类型参数。

示例代码:

MyClass<Integer> myObj = new MyClass<Integer>(42);
int myNum = myObj.getMyVar();

这里,MyClass<Integer> 表示实例化一个类型为 Integer 的泛型类。myObj 是这个类的一个实例,它的 myVar 属性被赋值为 42。myNum 是一个 int 变量,它的值被设置为 myObjmyVar 属性。因为类型参数被指定为 Integer,所以可以直接赋值给 int 类型。

类型边界

在泛型类定义中,可以使用类型边界(type boundaries)来限制参数的类型。类型边界可以是类、接口或类和接口的组合。

语法:

class className<T extends someClass> {
    // variables, constructors, methods
}

这里<T extends someClass>表示类型参数 T 必须是 someClass 类的子类(包括 someClass 本身)。

示例

下面是一个泛型类的示例,其中使用类型边界限制泛型参数的类型。

class ArrayUtility<T extends Number> {
    private T[] array;

    public ArrayUtility(T[] array) {
        this.array = array;
    }

    public T getMaxValue() {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i].doubleValue() > max.doubleValue()) {
                max = array[i];
            }
        }
        return max;
    }
}

这个类有一个泛型类型参数 T,它继承 Number 类。这意味着 T 必须是 Number 类或其子类的类型。该类有一个构造函数和一个方法,方法返回数组中最大的元素。

使用类型边界

使用类型边界的泛型类,必须保证传入的参数类型符合其的边界限制。示例代码:

Integer[] numbers = {1, 2, 3};
ArrayUtility<Integer> util = new ArrayUtility<Integer>(numbers);
Integer max = util.getMaxValue();

这里,ArrayUtility<Integer> 表示以 Integer 类型为边界的泛型类,util 是这个类的一个实例。传入的数组类型必须是 Number 或其子类的类型。

总结

本文介绍了 Java 泛型类的概念以及如何使用泛型类和类型边界。通过使用泛型类和类型边界,可以提高代码的重用性和类型安全性。