Java 如何获取当前接口的两个泛型
在 Java 中,泛型是一种参数化类型的概念,它允许我们在定义类、接口或方法时使用类型参数。在某些情况下,我们可能需要获取当前接口的两个泛型参数,本文将介绍如何实现这一功能。
1. 定义一个带有两个泛型参数的接口
首先,我们需要定义一个带有两个泛型参数的接口,例如:
public interface MyInterface<T, U> {
// 接口方法
void doSomething(T t, U u);
}
这个接口定义了一个方法 doSomething
,它接受两个参数,分别是类型为 T
和 U
的对象。
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
类来获取实际的泛型参数类型。
希望本文对你理解如何获取当前接口的泛型参数有所帮助。