开宗明义
反射的优点和好处:
反射可以很灵活的操作一个类,甚至这种方式在某种方面我愿称之为优雅。
Step 1.准备一个类,取名为ConstructorCollector
public class ConstructorCollector {
ConstructorCollector() {
System.out.println("====初始化 No Args========");
}
ConstructorCollector(int intArgs, String strArgs) {
System.out.println("====初始化 int intArgs,String strArgs=======");
}
ConstructorCollector(int intArgs) {
System.out.println("====初始化 int intArgs========");
}
}
ConstructorCollector类很简单,一个无参构造,一个只有一个参数的构造,一个两个参数的构造
GetConstructors VS GetDeclaredConstructors
GetContructor和GetDeclaredContructor
这两个方法是用来实例化一个构造函数的,GetConstructors是获取所有公有(public)构造方法,而GetDeclaredConstructors获取所有的构造方法(public,private,default,protected),
接收的对象就是Constructor类型的数组
Constructor[] c = ConstructorCollector.class.getDeclaredConstructors();
for (Constructor cs : c) {
System.out.println(cs);
}
//执行结果
/**
com.imooc.reflect.ConstructorCollector()
com.imooc.reflect.ConstructorCollector(int,java.lang.String)
com.imooc.reflect.ConstructorCollector(int)
**/
GetConstructor VS GetDeclaredConstructor
单数形式和复数形式,Constructors是所有,那么Constructor就是获取某个构造函数。
用法同上,只不过接收对象类型变成了Constructor
newInstance
一般来讲,实例化对象可以用new来实现,举个例子
ConstructorCollector cc=new ConstructorCollector(param1);
反射的写法
Constructor constructor = ConstructorCollector.class.getDeclaredConstructor(int.class);
ConstructorCollector constructorCollector = (ConstructorCollector)constructor.newInstance(111);
System.out.println(constructorCollector.getIntArgs());
值得注意的是,getDeclaredConstructor()填入的是类型,也就是int.class,String.class这些。
最后可得到注入的intargs值,111。
未完待续。