#关于ObjectFactory的练习
2019年10月21日晨练
##Java代码
//创建对象工厂
class ObjectFactory{
//返回对象的创建方法
public static newInstance(Class<?> cls){
//调用重载的instance方法,将字节码文件传入
return newInstance(cls,null,null);
}
//重载后的创建方法,因为构造函数可能包含参数
public static newInstance(Class<?> cls,Class<?>[] parameterTypes,
Object[] initargs){
//得到该类构造方法
Constructor<?> con=
cls.getDeclaredConstructor(parameterTypes);
//判断该类构造是否被private修饰,若修饰则将
if(!con.isAccessible()){
//取消访问控制检查
con.setAccessible(true);
//返回新对象
return con.newInstancce(initargs);
}
}
}
public class ObjectTest{
//定义静态内部类TestA用于测试,因为测试方法是main方法被static修饰
static class TestA{
//私有构造并且无参数
private TestA(){}
}
//包含参数的静态内部类
static class TestB{
private TestB(int a);
}
//测试
public static void main(Stringp[ args){
//使用TestA字节码文件创建新对象
Object testA=ObjectFactory.newInstance(TestA.class);
//使用TestB字节码文件创建新对象,此处包含参数
Object testB=ObjectFactory.newInstance(TestB.class,new Class[]{int.class},new Object[]{10});
}
}