Java 如何检查类是否没有参数构造函数

Java 如何检查类是否没有参数构造函数,java,reflection,Java,Reflection,我不想这样检查,因为它会引发异常 还有其他方法吗?您可以获取所有的构造函数,并检查它们的参数数量,当您找到一个参数为0时停止 Object obj = new Object(); try { obj.getClass().getConstructor(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) {

我不想这样检查,因为它会引发异常


还有其他方法吗?

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

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

您可以创建一个循环类的构造函数的方法,并检查是否有没有arg构造函数

private boolean hasParameterlessConstructor(Class<?> clazz) {
    return Stream.of(clazz.getConstructors())
                 .anyMatch((c) -> c.getParameterCount() == 0);
}
您可以使用
getConstructors()
,但它只会检查可见的构造函数。因此,以下内容将返回false

class A { }

hasNoArgConstructor(A.class);
布尔hasNoArgConstructor(类klass){
for(构造函数c:klass.getConstructors()){
if(c.getParameterTypes().length==0)返回true;
}
返回false;
}
B类{
私有B(){}
}
hasNoArgConstructor(B.class);

如果您使用的是Spring,则可以使用:


构造函数类没有getParameterCount()方法:@gerrytan。您可以使用
getParameterTypes
检查返回数组的大小。为什么会出现异常恐惧症?
boolean hasNoArgConstructor(Class<?> klass) {
  for(Constructor c : klass.getDeclaredConstructors()) {
    if(c.getParameterTypes().length == 0) return true;
  }
  return false;
}
class A { }

hasNoArgConstructor(A.class);
boolean hasNoArgConstructor(Class<?> klass) {
  for(Constructor c : klass.getConstructors()) {
    if(c.getParameterTypes().length == 0) return true;
  }
  return false;
}

class B {
  private B() {}
}

hasNoArgConstructor(B.class);
ClassUtils.hasConstructor(obj.getClass());