【java反射】Class类型的相关操作演练
【一】获取范型接口的实现类的范型类型
(1)范型接口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.springframework.context; import java.util.EventListener; public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * Handle an application event. * @param event the event to respond to */ void onApplicationEvent(E event); }
(2)范型接口实现类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.mobile.thinks.login.listen; import org.springframework.context.ApplicationListener; import com.mobile.thinks.login.event.BaseEvent; public class LoginListen implements ApplicationListener<BaseEvent>{ @Override public void onApplicationEvent(BaseEvent event) { } }
(3)范型接口实现类的范型的填充类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.mobile.thinks.login.event; import org.springframework.context.ApplicationEvent; public abstract class BaseEvent extends ApplicationEvent { public BaseEvent(Object source) { super(source); } }
(4)获取范型的填充类的类型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { LoginListen listen=new LoginListen(); Class<?> cls =listen.getClass(); //cls==>class com.mobile.thinks.login.listen.LoginListen System.out.println("cls==>"+cls); Type[] type=cls.getGenericInterfaces(); Type types=cls.getGenericSuperclass(); for(int i=0;i<type.length;i++){ Type ty=type[i]; if(ty instanceof ParameterizedType){ Type[] sTypes=((ParameterizedType)ty).getActualTypeArguments(); for(int j=0;j<sTypes.length;j++){ Type clsa=sTypes[j]; //范型类型==>class com.mobile.thinks.login.event.BaseEvent System.out.println("范型类型==>"+(Class)clsa); } } } }