Java 如何获取当前接口的两个泛型

在 Java 中,泛型是一种参数化类型的概念,它允许我们在定义类、接口或方法时使用类型参数。在某些情况下,我们可能需要获取当前接口的两个泛型参数,本文将介绍如何实现这一功能。

1. 定义一个带有两个泛型参数的接口

首先,我们需要定义一个带有两个泛型参数的接口,例如:

public interface MyInterface<T, U> {
    // 接口方法
    void doSomething(T t, U u);
}

这个接口定义了一个方法 doSomething,它接受两个参数,分别是类型为 TU 的对象。

2. 实现接口并获取泛型参数类型

接下来,我们需要实现这个接口,并获取其泛型参数的类型。假设我们实现一个类 MyClass 来实现 MyInterface 接口:

public class MyClass implements MyInterface<String, Integer> {
    @Override
    public void doSomething(String t, Integer u) {
        // 实现接口方法
    }
    
    public void getGenericTypes() {
        // 获取泛型参数的类型
        Class<?>[] genericTypes = this.getClass().getGenericInterfaces();
        
        // 打印泛型参数的类型
        for (Type genericType : genericTypes) {
            if (genericType instanceof ParameterizedType) {
                ParameterizedType parameterizedType = (ParameterizedType) genericType;
                
                Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
                
                for (Type actualTypeArgument : actualTypeArguments) {
                    System.out.println(actualTypeArgument.getTypeName());
                }
            }
        }
    }
}

getGenericTypes 方法中,我们通过调用 getClass().getGenericInterfaces() 方法来获取当前类实现的接口。然后,我们遍历这些接口,判断其是否为参数化类型,如果是,就可以获取到其实际的泛型参数类型。

3. 调用方法并输出结果

最后,我们可以创建一个 MyClass 对象,并调用 getGenericTypes 方法来输出泛型参数的类型:

public class Main {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.getGenericTypes();
    }
}

运行程序,输出结果为:

java.lang.String
java.lang.Integer

这表明我们成功地获取到了当前接口的两个泛型参数类型。

总结

通过以上步骤,我们可以获取当前接口的两个泛型参数。首先,我们需要定义一个带有两个泛型参数的接口。然后,我们实现这个接口,并通过 getClass().getGenericInterfaces() 方法获取当前类实现的接口。最后,我们遍历这些接口,通过 ParameterizedType 类来获取实际的泛型参数类型。

希望本文对你理解如何获取当前接口的泛型参数有所帮助。