📜  Java泛型-参数化类型(1)

📅  最后修改于: 2023-12-03 14:43:01.681000             🧑  作者: Mango

Java泛型-参数化类型

Java泛型在Java 5中被引入,其主要目的是允许您编写参数化类和方法,以便可以在编译时对类型执行安全检查,并且由于类型参数化,可以重用代码。

Java泛型中的参数化类型允许您编写代码来处理一系列不同的对象类型,同时仍然通过类型检查进行编译时类型安全检查。

声明参数化类型

要声明参数化类型,请跟随类名后面的类型参数

class MyClass<T> {
    T value;
    MyClass(T v) {
        value = v;
    }
    T getValue() {
        return value;
    }
}

在这里,我们声明了一个名为MyClass的类,并在类名后面添加了一个类型参数T。构造函数和getValue()方法都使用T作为返回类型或参数类型。

参数化类型示例
MyClass<String> obj1 = new MyClass<>("Hello");
MyClass<Integer> obj2 = new MyClass<>(10);

System.out.println(obj1.getValue());
System.out.println(obj2.getValue());

在这里,我们创建了两个不同的对象,一个是MyClass<String>类型,另一个是MyClass<Integer>类型。我们使用参数化构造函数初始化值,并使用getValue()方法检索值。

泛型类的继承

Java泛型支持继承。您可以继承另一个泛型类或接口,方法是在类名后面声明类型参数,并使用该类型参数限定基础类型参数。

以下示例演示如何继承另一个泛型类,

class MySubClass<T, V> extends MyClass<T> {
    V value;
    MySubClass(T v1, V v2) {
        super(v1);
        value = v2;
    }
    V getValue() {
        return value;
    }
}

在这里,我们声明了一个名为MySubClass的子类,并将两个类型参数T和V添加到其名称中。此子类通过声明其第一个类型参数T继承于MyClass类。

泛型方法

Java泛型还支持泛型方法。要声明泛型方法,请在其返回类型之前放置类型参数。

static <T> boolean isEqual(T arg1, T arg2) {
    return arg1.equals(arg2);
}

在这里,我们声明了一个名为isEqual的方法,并在其名称后放置类型参数T。方法使用传递给它的两个参数来比较它们的相等性。

类型通配符

Java泛型还支持类型通配符。类型通配符可用于在泛型代码中表示未知类型。类型通配符使用?表示。

以下是使用类型通配符的示例:

static void printList(List<?> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println();
}

在这里,printList方法使用类型通配符?来接受参数的类型,该类型未知。这使得该方法可以接受任何类型的列表,并且每次调用都根据传递的列表类型动态更改。

结论

Java泛型使用参数化类型使您的代码更具有通用性和灵活性,同时仍然通过类型检查进行编译时类型安全检查。了解Java泛型对于Java开发人员来说是非常重要的。