目录结构
User
package com.xiao.entity;
/**
* @author
* @version 1.0
* @date 5/8/2022 12:56 PM
*/
public class User {
}
父类
package com.xiao;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* @author
* @version 1.0
* @date 4/23/2022 11:24 PM
*/
public class T1 <T>{
public T1() {
/*
//获取继承了类
Class<? extends T1> aClass = getClass();
System.out.println("getClass():"+aClass);
//得到基础类的通用的超类
Type genericSuperclass = getClass().getGenericSuperclass();
System.out.println("genericSuperclass: "+ genericSuperclass);
//参数化
ParameterizedType genericSuperclass1 = (ParameterizedType) getClass().getGenericSuperclass();
System.out.println("genericSuperclass1: "+genericSuperclass1);
//实际的类型参数
Type actualTypeArgument = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
System.out.println("actualTypeArgument: "+actualTypeArgument);
//反射机制,反射什么啥?
Class<T> actualTypeArgument1 = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
System.out.println("actualTypeArgument1: " +actualTypeArgument1);
//获取简单名称,相对于前面的几个步骤
String simpleName = ((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]).getSimpleName();
System.out.println("simpleName: " + simpleName);*/
//获取继承类,getClass():class com.xiao.T2
Class<? extends T1> aClass = getClass();
System.out.println("getClass():"+aClass);
//获取被继承类,genericSuperclass: com.xiao.T1<com.xiao.entity.User>
Type genericSuperclass = aClass.getGenericSuperclass();
System.out.println("genericSuperclass: "+ genericSuperclass);
//参数化 ,我目前看不出来发生了什么变化g enericSuperclass1: com.xiao.T1<com.xiao.entity.User>
ParameterizedType genericSuperclass1 = (ParameterizedType) genericSuperclass;
System.out.println("参数化 genericSuperclass1: "+genericSuperclass1);
//获取超级类的实际类型参数 actualTypeArgument: class com.xiao.entity.User
Type actualTypeArgument = genericSuperclass1.getActualTypeArguments()[0];
System.out.println("actualTypeArgument: "+ actualTypeArgument);
//如果没有反射机制,就没法获取实际类型参数的名称了
/*
反射机制
在运行状态中。
对于任意一个类,都能够知道这个类的所有的属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能就是反射机制。
* */
String typeName = actualTypeArgument.getTypeName();
System.out.println("typeName: "+typeName);
String s = actualTypeArgument.toString();
System.out.println("s:" + s);
Class<? extends Type> aClass1 = actualTypeArgument.getClass();
System.out.println("aClass1: " + aClass1);
//反射机制 actualTypeArgument1: class com.xiao.entity.User
Class<T> actualTypeArgument1 = (Class<T>) actualTypeArgument;
System.out.println("actualTypeArgument1: "+ actualTypeArgument1);
Class<? extends Class> actualTypeArgument1Class = actualTypeArgument1.getClass();
System.out.println("actualTypeArgument1Class: " + actualTypeArgument1Class);
//获取名称
String simpleName = actualTypeArgument1.getSimpleName();
System.out.println("simpleName: "+simpleName);
}
}
子类
package com.xiao;
import com.xiao.entity.User;
/**
* @author
* @version 1.0
* @date 4/23/2022 11:26 PM
*/
public class T2<T> extends T1<User> {
public static void main(String[] args) {
T2 t = new T2();
}
}
祝你好运!
希望能帮你理解些!注释的内容可以不用看,本人随便写的个人感受。
下面部分的内容不用看了!!!!
下面部分的内容不用看了!!!!
有些说法可能不太合理,希望多多参考,我也是今天开始了解这个java反射机制。之前,老师也有将,没怎么用?所以没怎么了解,等真正需要的时候才肯去学,肯了解。多看看有些的开源项目,拿来学学?多上网搜搜,我这个也是参考别人的代码,让后试着去理解,并标记,我的方法可能有误,当然,目前本人根据自己还是这个行业的门外汉。哎!