有没有办法让构造函数强制不带参数?
我认为这个例子会起作用。您有 A 类和 B 类:
public class A {
public A() {
//do something
}
}
public class B extends A {
public B(int number) {
//do something with number
}
}
但是你不能调用B b = new B();
,因为B类没有不带参数的构造函数。它只有带有数字的构造函数。
我只是在java中玩反射,想从类中实例化对象(class.newInstance()
)。但要像这样实例化,您需要不带参数的构造函数。
我现在不是在问反射(reflection)。我只是想知道是否有一种方法可以强制没有 arg 构造函数,或者确保该类已经提到了构造函数。
最佳答案
如果我正确理解了这个问题,您希望强制所有类都具有零参数/默认构造函数。您可以添加一个测试,如果您有任何没有此类构造函数的类,则该测试会失败,使用 Reflections library
@Test
public void ensureAllClassesInPackageTempHaveAZeroArgConstructor() throws Exception {
List<ClassLoader> classLoadersList = new LinkedList<>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setScanners(new SubTypesScanner(false), new ResourcesScanner())
.setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
.filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix("temp"))));
for (Class<?> clazz : reflections.getSubTypesOf(Object.class)) {
boolean hasZeroArgConstructor = Arrays.asList(clazz.getConstructors()).stream().anyMatch(c -> c.getParameterCount() == 0);
if (! hasZeroArgConstructor) {
Assert.fail(String.format("%s doesn't have a zero arg constructor", clazz.getCanonicalName()));
}
}
}
关于Java - 强制构造函数不带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166203/