入参三个泛型 Java
在Java中,泛型是一种用于在编译时期检查类型安全性的机制。它可以在编译时期捕获类型错误,避免在运行时期出现类型转换异常。在Java中,可以使用泛型来定义类、接口、方法等。
泛型的基本概念
泛型是一种在创建类、接口或方法时可以接受多种类型的参数或返回值的机制。通过使用泛型,我们可以编写更加通用和灵活的代码。
Java中的泛型使用尖括号<>
来指定类型参数。例如,List<String>
表示一个只能存储字符串的列表。泛型可以应用于类、接口、方法等不同的场景。
泛型类
泛型类是指具有一个或多个类型参数的类。这些类型参数可以在类的字段、方法参数和返回值中使用。
下面是一个简单的泛型类的示例,它表示一个包含三个元素的元组:
public class Tuple<A, B, C> {
private A first;
private B second;
private C third;
public Tuple(A first, B second, C third) {
this.first = first;
this.second = second;
this.third = third;
}
public A getFirst() {
return first;
}
public B getSecond() {
return second;
}
public C getThird() {
return third;
}
}
在上面的示例中,Tuple
类接受三个类型参数A、B和C,并包含了对应的字段和访问方法。使用该类时,可以通过指定具体的类型实参来创建对象:
Tuple<String, Integer, Boolean> tuple = new Tuple<>("Hello", 42, true);
String first = tuple.getFirst(); // 返回 "Hello"
Integer second = tuple.getSecond(); // 返回 42
Boolean third = tuple.getThird(); // 返回 true
通过使用泛型类,我们可以创建出更加通用的数据结构,适应不同类型的需求。
泛型接口
泛型接口是指具有一个或多个类型参数的接口。这些类型参数可以在接口的方法参数和返回值中使用。
下面是一个简单的泛型接口的示例,它表示一个可以访问数据库的接口:
public interface Dao<T> {
void save(T entity);
T findById(int id);
List<T> findAll();
}
在上面的示例中,Dao
接口接受一个类型参数T,并定义了保存实体、根据ID查找实体和获取所有实体的方法。实现该接口时,需要指定具体的类型实参:
public class UserDao implements Dao<User> {
@Override
public void save(User user) {
// 实现保存逻辑
}
@Override
public User findById(int id) {
// 实现根据ID查找逻辑
}
@Override
public List<User> findAll() {
// 实现获取所有实体逻辑
}
}
通过使用泛型接口,我们可以定义出更加通用的接口,适应不同类型的实体。
泛型方法
泛型方法是指具有一个或多个类型参数的方法。这些类型参数可以在方法的参数和返回值中使用。
下面是一个简单的泛型方法的示例,它表示一个可以交换两个元素的方法:
public class SwapUtil {
public static <T> void swap(T[] array, int i, int j) {
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
在上面的示例中,swap
方法接受一个泛型数组array
和两个索引i
、j
,并使用临时变量temp
交换数组中的两个元素。通过使用泛型方法,我们可以在不同类型的数组中交换元素:
String[] strArray = {"Hello", "World"};
SwapUtil.swap(strArray, 0, 1);
System.out.println(Arrays.toString(strArray)); // 输出 ["World", "Hello"]
Integer[] intArray = {42, 24};
SwapUtil.swap(intArray, 0, 1);
System.out.println(Arrays.toString(intArray)); // 输出 [24, 42]