我目前正在开发一个程序,我将在运行时动态加载类,并构建一个函数库来支持它。其中一个函数是一种方法,可以轻松地在给定的jar文件中搜索给定的类名,并从给定的初始化参数集创建一个新实例。
问题是争论。我知道如何为一组类类型找到类的构造函数,但是,尝试查找接受参数列表的构造函数更难。我的第一个想法是迭代遍历参数并在每个参数上调用getClass()
,但是对于某些构造函数来说可能是有效的null参数呢?
是否有任何明智的方法可以为给定的参数集找到正确的构造函数?
注意:仅限标准Java,这是一个联合项目,因此Java派生语言和第三方库不可用。
答案 0 :(得分:2)
您是否通过了Reflection API教程?它实现了你想要的......
答案 1 :(得分:1)
通过Reflection API教程后,您可以使用单一方法解决问题
private final boolean checkConstructor(Class<?> type, Class<?>... parameterTypes) {
try {
forName.getConstructor(parameterTypes);
return true;
}catch(NoSuchMethodException e) {
}
return false;
}
您必须记住paraemterTypes
的顺序很重要。
您不应该在需要不知道parametersTypes的构造函数的情况下进行sytiation。相同的规则适用于您不应在构造函数中使用null的代码样式。
答案 2 :(得分:0)
getClass()是一种正确的方法。您必须迭代所有可访问的构造函数,并根据Choosing the Constructor and its Arguments的精神选择最具体的构造函数,包括在找到0或&gt; 1构造函数时抛出exeptions,以及在Determine Method Signature中装箱/取消装箱。
表示,由于空值,您无法从字面上实现该算法,但是应该保持尽可能接近。