Java 两个泛型参数
在Java中,泛型是一种强大的特性,它允许我们定义可以在不同类型之间共享的代码。泛型参数可以是任何类型,包括类、接口和原始类型。在本文中,我们将讨论如何在Java中使用两个泛型参数,并提供相应的代码示例。
什么是泛型参数
泛型参数是在声明类、接口或方法时使用的类型参数。它允许我们在使用这些类、接口或方法时指定实际的类型。通过使用泛型参数,我们可以编写具有更好类型安全性和重用性的代码。
使用两个泛型参数的例子
假设我们要编写一个名为Pair
的类,它表示两个值的有序对。我们可以使用两个泛型参数来表示这两个值的类型。
class Pair<T, U> {
private T first;
private U second;
public Pair(T first, U second) {
this.first = first;
this.second = second;
}
public T getFirst() {
return first;
}
public U getSecond() {
return second;
}
public void setFirst(T first) {
this.first = first;
}
public void setSecond(U second) {
this.second = second;
}
}
在上面的代码中,我们定义了一个名为Pair
的类,并使用<T, U>
作为两个泛型参数。类中有两个私有变量first
和second
,它们的类型分别为T
和U
。我们还提供了一些getter和setter方法来访问和修改这两个变量。
现在,我们可以创建Pair
的实例,并指定实际的类型。
Pair<String, Integer> pair = new Pair<>("Hello", 123);
String first = pair.getFirst();
Integer second = pair.getSecond();
System.out.println(first); // 输出:Hello
System.out.println(second); // 输出:123
在上面的代码中,我们创建了一个Pair
实例,其中第一个值的类型为String
,第二个值的类型为Integer
。然后,我们使用getFirst
和getSecond
方法获取这两个值,并打印它们。
泛型参数的限制
在Java中,我们可以使用泛型参数的上限来限制它们的类型。上限是指泛型参数可以是指定类型或指定类型的子类。例如,如果我们只想让两个泛型参数都是Number
类或其子类,我们可以像下面这样限制它们的类型。
class Pair<T extends Number, U extends Number> {
// ...
}
在上面的代码中,我们使用extends Number
来限制两个泛型参数的类型。
序列图
下面是一个使用Pair
类的序列图示例。
sequenceDiagram
participant Client
participant Pair
Client->>+Pair: 创建实例
Client->>Pair: 调用setFirst和setSecond方法
Client->>Pair: 调用getFirst和getSecond方法
Pair->>-Client: 返回结果
上面的序列图展示了一个典型的客户端与Pair
类之间的交互过程。客户端首先创建Pair
的实例,然后通过调用方法设置和获取值。最后,Pair
返回结果给客户端。
关系图
下面是一个使用Pair
类的关系图示例。
erDiagram
Pair ||-- T: has
Pair ||-- U: has
上面的关系图展示了Pair
类与其泛型参数T
和U
之间的关系。Pair
类拥有类型为T
和U
的对象。
结论
通过使用两个泛型参数,我们可以编写更灵活和通用的代码。Java中的泛型参数允许我们在使用类、接口或方法时指定实际的类型,从而提高代码的类型安全性和重用性。希望本文能帮助你理解和使用Java中的两个泛型参数。