涉及知识点
-
泛型
- 反射
从new说起
现在我们有如下两个功能类:
/** 类A */
public class A {
/**
* 模拟一段业务逻辑
*/
public void showInfo() {
System.out.println("A类showInfo");
}
}
/** 类B */
public class B {
/**
* 模拟一段业务逻辑
*/
public void showInfo() {
System.out.println("B类showInfo");
}
}
在类DITest中我们要测试A、B两个类的业务逻辑,代码如下:
/** 以前我们业务逻辑测试方法 */
public class DITest {
private static A a = new A();
private static B b = new B();
public static void main(String[] args) {
a.showInfo();
b.showInfo();
}
}
通过new方法我们得到了两个类的实例,而且完成了测试:
A类showInfo
B类showInfo
现在我们要测试100个或者更多的类,如果按照上面的方式我们要new100次或者更多,那么为什么不来一支烟思考一下有没有什么更便捷的方法呢?当然有,在JDK1.5的时候引入了泛型。
下面我们通过泛型+反射来解决100次new的困扰:
/** 解放new */
public class DITest {
/** 对象生成工厂 */
public static <T extends Object> T getNewInst(Class<T> c) throws Exception {
return c.getConstructor().newInstance();
}
public static void main(String[] args) throws Exception {
getNewInst(A.class).showInfo();
getNewInst(B.class).showInfo();
}
}
测试输出结果:
A类showInfo
B类showInfo
上面的例子里面,我们通过了getNewInst()方法,传入要得到的Class类,然后我们就得到了这个Class对应的对象,我们可以简单的将这个方法是一个类工厂,可以用来实例化给定的类,后续我们会将这个方法扩展为类,在她的基础上,我们将建立整个BeanFactory的功能体系。
注意:getNewInst()目前只能初始化有默认构造函数的类