gpt4 book ai didi

java - (Java 反射)检查特定构造函数是否存在

转载 作者:行者123 更新时间:2023-12-03 11:20:27 25 4
gpt4 key购买 nike

我有一个项目使用反射来加载一些类和模块。这些模块可以有一个带有特定参数的构造函数。如果该构造函数存在,我想使用该构造函数创建该类的新实例,如果它不存在,我想使用默认构造函数。

现在我想知道如何检查该特定构造函数是否存在。到目前为止,我发现的唯一方法是这样做:

private boolean hasBotConstructor(final Class<?> moduleClass) {
try {
moduleClass.getDeclaredConstructor(Bot.class);
// Constructor exists
return true;
}
catch (NoSuchMethodException e) {
// Constructor doesn't exist
return false;
}
}

这行得通,但使用 try/catch 对我来说似乎是不好的做法。

最佳答案

我认为,有一个更好的解决方案,但我不确定默认构造函数是什么意思。如果你有带 1 个参数的构造函数并且默认构造函数没有参数,那么你可以像这样简单地做到这一点:

return moduleClass.getDeclaredConstructors()[0].getParameterCount()==1;
这也假设您只声明了一个构造函数。
如果你有更多的构造函数,那么你必须检查整个数组,如果有的话,你想要的。
for(Constructor<?> constructor : moduleClass.getDeclaredConstructors()){
if(constructor.getParameterCount()==1 && constructor.getParameterTypes()[0] == Bot.class){
return true;
}
}
return false;
如果您需要检查构造函数中的特定类型并且它是我能够编写的最干净的解决方案,则此代码还可以处理。
解释:
getDeclaredConstructors 返回特定类中的所有构造函数。然后检查每个构造函数(通过简单的 foreach 循环),如果它符合您的要求,则返回 true。您可以通过更改参数的数量轻松地为不同的构造函数修改它,而不是通过调用 constructor.getParameterTypes() 检查每个参数是否具有正确的类型。

关于java - (Java 反射)检查特定构造函数是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47127559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com