目的:理解属性拷贝工具类(根据类的class对象获取类的对象:利用反射获取类的对象)
/** * @description: 对象属性拷贝 转化 * @param source * @param destinationClass * @return T */ public static <T> T copyProperties(Object source, Class<T> destinationClass) { if (null == source) { return null; } T t = null; try { /** * 主要就是为了理解这一句: * getDeclaredConstructor获取指定的构造方法(这里获取的是无参构造)对象 * newInstance获取类的对象 */ t = destinationClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { e.printStackTrace(); } if (t != null) { BeanUtils.copyProperties(source, t); } return t; }
概念
利用反射获取类的构造方法,从而获取类的对象
类:Constructor
注释:构造方法类
继承关系
public final class Constructor<T> extends Executable public abstract class Executable extends AccessibleObject implements Member, GenericDeclaration
//其中AccessibleObject 类的方法,获取操作权限,可以获取类的私有的构造方法(通过new获取的对象,无法访问私有属性)
public void setAccessible(boolean flag) throws SecurityException
位置 java.lang.reflect.Constructor;
常用方法摘要
public int getModifiers() 获取构造方法的修饰符(返回值是int,Modifier类toString(int mod)方法可以获取到修饰符具体看源码 public String getName() 获取构造方法的名称 public Class<?>[] getParameterTypes() 获取构造方法的参数类型 public T newInstance(Object ... initargs) 获取类的对象
类:Class
public final class Class<T>
常用方法摘要
获取类的构造方法对象(Constructor对象)4种
public Constructor<?>[] getConstructors() 获取所有公有的构造方法 public Constructor<T> getConstructor(Class<?>... parameterTypes) 获取指定的公有的构造方法(参数为构造方法的参数的类型) public Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法 public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)获取指定的构造方法