如何通用地使用默认构造函数
How to use a default Constructor genericly
我想以通用方式激活默认构造函数。
例如,获取一组构造函数并激活其中一个(假设第一个是默认的)。
我想用它的代码是这样的:
construct (Class clazz){
.....
List<Constructor> constructors=
Arrays.stream(clazz.getDeclaredConstructors()).filter(X->X.isAnnotationPresent(Inject.class)).collect(Collectors.toList());
if(constructors.size()>1)
throw new MultipleInjectConstructorsException();
else if(constructors.size()==0){
List<Constructor> defaultctor=
Arrays.stream(clazz.getDeclaredConstructors()).filter(X->X.getParameterCount()==0).collect(Collectors.toList());
if(defaultctor.size()==0)
throw new NoConstructorFoundException();
else {
/**activate the default constructor i got*/
//obj=defaultctor.get(0);
}
}
....
}
如何使用 defaultctor.get(0) 中的默认构造函数?
我认为这个问题可以进一步概括。
如何激活反射接收到的方法
如果我知道方法的名称和所有相关信息?
我怎样才能激活它?
Constructor.newInstance
是调用构造函数实例的方法。但是,几乎可以肯定,使用 Supplier
和 MyType::new
.
形式的方法参考会更好
我想以通用方式激活默认构造函数。
例如,获取一组构造函数并激活其中一个(假设第一个是默认的)。
我想用它的代码是这样的:
construct (Class clazz){
.....
List<Constructor> constructors=
Arrays.stream(clazz.getDeclaredConstructors()).filter(X->X.isAnnotationPresent(Inject.class)).collect(Collectors.toList());
if(constructors.size()>1)
throw new MultipleInjectConstructorsException();
else if(constructors.size()==0){
List<Constructor> defaultctor=
Arrays.stream(clazz.getDeclaredConstructors()).filter(X->X.getParameterCount()==0).collect(Collectors.toList());
if(defaultctor.size()==0)
throw new NoConstructorFoundException();
else {
/**activate the default constructor i got*/
//obj=defaultctor.get(0);
}
}
....
}
如何使用 defaultctor.get(0) 中的默认构造函数?
我认为这个问题可以进一步概括。
如何激活反射接收到的方法 如果我知道方法的名称和所有相关信息?
我怎样才能激活它?
Constructor.newInstance
是调用构造函数实例的方法。但是,几乎可以肯定,使用 Supplier
和 MyType::new
.