Java全栈学习笔记29
# 泛型反射
ORM:Hibernate MyBatis/MyBatis-plus
MVC:Struts SpringMVC Spring-webflux
项目架构:Spring SpringBoot..
提升开发效率
## 泛型
参数化类型,使用这种方式,让类中的数据类型动态化
泛型不可以是基本数据类型。
减少类型之间相互转换而引起的异常问题
参数类型使用extends关键字,形成有界类型
泛型类
public class 类名<通配符> {
private 通配符 变量名
}
泛型方法
//泛型的实际类型是依靠传入的参数类型
public <S> void eat(S eat){
}
public <S> void eat(){
S s = new Object();
}
public <S> S eat(){
S s = new Object();
return s;
}
public <S> List<S> eat(){
S s = new Object();
List<S> list = new ArrayList<>();
list.add(s);
return list;
}
## 反射
在程序运用过程中,动态的操作类以及对象的属性或者方法。
必要条件:获取类的类型 Class,字节文件对象
类名.class属性
类的对象 getClass()方法获取类型
Class.forName("类的全限定名称(包名+类名)"),主动抛出 ClassNotFoundException 异常。
方法
getDeclaredConstructor()/getConstructor([参数类型顺序的参数列表]) 获取类的构造方法
getConstructors() 获取所有的构造方法
getDeclaredField/getField(name) 根据属性名获取属性对象
getDeclaredFields()/getFields()
Field
方法中不包含Declared的获取公共属性或者方法或者构造方法。
field.setAccessible 通过为Field获取方法Constructor对象设置该方式的值为true,操作私有的构造方法或者属性
private Student(){
}
Constructor<?> con = clazz.getDeclaredConstructor();
con.setAccessible(**true**);
Object obj = con.newInstance();
System.**out**.println(obj);
getDeclaredMethod/getMethod()
Method 对象
invoke() 执行方法
getInterfaces() 当前类实现的接口
Constructor 构造方法对象
getName
getParameterCount() 构造方法参数的个数
getParameters() 获取所有的参数
Parameter 对象
newInstance([参数]) 初始化对象,传入的参数和构造方法的获取时使用无参和有参相关