参三个泛型 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(); // 返回 42Boolean 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]
