Bootstrap

2019-10-21_晨练

#关于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});
}
}

;