如何检查类没有参数构造函数
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);