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

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

我不想像这样检查,因为它抛出exception。

还有另一种方式吗?

您可以获取所有Constructor并检查其参数数量,当您找到具有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; } 

您必须将getDeclaredConstructors()用于非公共构造函数。

Stream重写。

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

如果您使用的是Spring,则可以使用ClassUtils.hasConstructor() :

 ClassUtils.hasConstructor(obj.getClass()); 

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

 boolean hasNoArgConstructor(Class klass) { for(Constructor c : klass.getDeclaredConstructors()) { if(c.getParameterTypes().length == 0) return true; } return false; } 

请注意,通过使用getDeclaredConstructors() ,将包含编译器添加的默认构造函数。 以下将返回true

 class A { } hasNoArgConstructor(A.class); 

您可以使用getConstructors()但它只会检查可见的构造函数。 因此,以下将返回false

 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);