📅  最后修改于: 2023-12-03 14:43:01.681000             🧑  作者: Mango
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开发人员来说是非常重要的。