Java - 强制构造函数不带参数

标签 java constructor

有没有办法让构造函数强制不带参数?

我认为这个例子会起作用。您有 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/

相关文章:

java - 16位偏移和24位偏移是什么意思?我如何使用java进行这样的计算

java - 将bean xml转换为spring boot注释

java - Solr 字段搜索、通配符和转义字符

java - 内部类和构造函数

c++ - 我想作为对其他类的引用传递,并初始化一个成员,这可能吗?

java - 从 linux Deepin 15 中的 java 应用程序打印在 jaspersoft studio 中制作的报告时出错

java - 使用来自 sqlite 数据库的数据填充微调器 - 应用程序崩溃

C#构造函数的奇怪问题

Java 构造函数调用另一个构造函数

c++ - 什么是 C++ 中的转换构造函数?它是干什么用的?