构造函数:从参数列表中获取类型列表

时间:2012-10-09 11:04:16

标签: java constructor arguments

我目前正在开发一个程序,我将在运行时动态加载类,并构建一个函数库来支持它。其中一个函数是一种方法,可以轻松地在给定的jar文件中搜索给定的类名,并从给定的初始化参数集创建一个新实例。

问题是争论。我知道如何为一组类类型找到类的构造函数,但是,尝试查找接受参数列表的构造函数更难。我的第一个想法是迭代遍历参数并在每个参数上调用getClass(),但是对于某些构造函数来说可能是有效的null参数呢?

是否有任何明智的方法可以为给定的参数集找到正确的构造函数?

注意:仅限标准Java,这是一个联合项目,因此Java派生语言和第三方库不可用。

3 个答案:

答案 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中装箱/取消装箱。

表示,由于空值,您无法从字面上实现该算法,但是应该保持尽可能接近。