概念
GenericTypeResolver是spring提供的泛型解析工具类,用于解析当前类所使用的泛型Class,用于适配某些特定场景需求以及设计模式中。
例如:
1、定义接口
public interface MyInterface<T> {
void testMethod(T event);
}
2、定义实现类
public class MyImpl implements MyInterface<String>{
@Override
public void testMethod(String event) {
}
}
3、测试
public static void main(String[] args) {
MyImpl dffImpl = new MyImpl();
Class<?> aClass = GenericTypeResolver.resolveTypeArgument(dffImpl.getClass(), MyInterface.class);
System.out.println(aClass);
}
结果:
class java.lang.String
解决多级继承,多接口实现的问题,支持获取多个泛型参数类型
例如:
class IClassProviderTest {
interface Provider<T> {
default Class<T> provideClass() {
return (Class<T>) GenericTypeResolver.resolveTypeArgument(getClass(), Provider.class);
}
}
interface I0<T> extends Provider<T> {
}
interface I1<T> extends I0<T> {
}
interface I2<T> extends I1<T> {
}
class C0<T> implements Provider<T> {
}
class C1<T> extends C0<T> {
}
class C2<T> extends C1<T> {
}
class Entity {
}
public static void main(String[] args) {
IClassProviderTest test = new IClassProviderTest();
test.provideClass();
}
void provideClass() {
{
class C implements I0<Entity> {
}
System.out.println(new C().provideClass());
}
{
class C implements I1<Entity> {
}
System.out.println(new C().provideClass());
}
{
class C implements I2<Entity> {
}
System.out.println(new C().provideClass());
}
{
class C extends C0<Entity> {
}
System.out.println(new C().provideClass());
}
{
class C extends C1<Entity> {
}
System.out.println(new C().provideClass());
}
{
class C extends C2<Entity> {
}
System.out.println(new C().provideClass());
}
}
}