入参三个泛型 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和两个索引ij,并使用临时变量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]