无参数构造函数验证。 Java
Parameterless constructor validation. Java
如何检查 class 中是否存在无参数构造函数?
我试过了:
if (classToCheck.getConstructor() != null) {
//Yes, there is one.
} else {
//No, there isn't one.
}
但是 classToCheck.getConstructor()
总是 returns 正确。
我做错了什么?
编辑。
private boolean hasNoArgConstructor(Class classToCheck) {
try {
if (classToCheck.getConstructor() != null) {
return true;
}
} catch (NoSuchMethodException e) {
System.out.println("Error");
}
return false;
}
因此,方法的主要思想是如果 class 中有一个不带参数的构造函数,则方法为真。
请记住,如果您不编写任何显式构造函数,编译器将隐式地为您提供一个无参数构造函数。
所以 : class 没有任何构造函数 ==> 在编译后变成一个 class 有一个没有参数的构造函数。
您可以使用此代码:
if(Arrays.stream(classToCheck.class.getConstructors()).filter(constructor -> constructor.getParameterCount() == 0).count() == 1 )
System.out.println("exists");
else
System.out.println("not exists");
只是不要忘记 getConstructors() 只查找 public 构造函数!
如何检查 class 中是否存在无参数构造函数?
我试过了:
if (classToCheck.getConstructor() != null) {
//Yes, there is one.
} else {
//No, there isn't one.
}
但是 classToCheck.getConstructor()
总是 returns 正确。
我做错了什么?
编辑。
private boolean hasNoArgConstructor(Class classToCheck) {
try {
if (classToCheck.getConstructor() != null) {
return true;
}
} catch (NoSuchMethodException e) {
System.out.println("Error");
}
return false;
}
因此,方法的主要思想是如果 class 中有一个不带参数的构造函数,则方法为真。
请记住,如果您不编写任何显式构造函数,编译器将隐式地为您提供一个无参数构造函数。
所以 : class 没有任何构造函数 ==> 在编译后变成一个 class 有一个没有参数的构造函数。
您可以使用此代码:
if(Arrays.stream(classToCheck.class.getConstructors()).filter(constructor -> constructor.getParameterCount() == 0).count() == 1 )
System.out.println("exists");
else
System.out.println("not exists");
只是不要忘记 getConstructors() 只查找 public 构造函数!