java - 我如何检查一个类没有参数构造函数

标签 java reflection

    Object obj = new Object();
    try {
        obj.getClass().getConstructor();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        dosomething();          
        e.printStackTrace();
    }

我不想这样检查,因为它会抛出异常。

还有别的办法吗?

最佳答案

您可以获取所有构造函数并检查它们的参数数量,当您找到一个参数为 0 时停止。

private boolean hasParameterlessPublicConstructor(Class<?> clazz) {
    for (Constructor<?> constructor : clazz.getConstructors()) {
        // In Java 7-, use getParameterTypes and check the length of the array returned
        if (constructor.getParameterCount() == 0) { 
            return true;
        }
    }
    return false;
}

对于非公共(public)构造函数,您必须使用 getDeclaredConstructors()

Stream 重写。

private boolean hasParameterlessConstructor(Class<?> clazz) {
    return Stream.of(clazz.getConstructors())
                 .anyMatch((c) -> c.getParameterCount() == 0);
}

关于java - 我如何检查一个类没有参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27810634/

相关文章:

c# - 如何将通过反射获得的方法分配给委托(delegate)? (或 : how to speed up method calls through reflection)

go - 在 Golang 中无需声明结构即可从接口(interface)获取接口(interface)字段值

c# - 如何在 C# 中找到对象的所属程序集

java - JVM突然崩溃

java - 如何在不使用内置日历包 api 的情况下在 java 中打印日期

java - 如何通过 ServletContext 的属性机制使 servlet 接收到的属性可供其他 servlet 使用?

java - 如何将 PApplet 对象嵌入到普通小程序中?

java - 用java制作Jhipster REST客户端

java - 使用 StatusBarManagerService 时出错 - android.permission.STATUS_BAR_SERVICE 上的 java.lang.SecurityException

Haskell:以字符串形式获取数据构造函数名称