0

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

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

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

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

4

3 回答 3

2

您是否通过反射 API教程?它有你想要的实现..

于 2012-10-09T11:08:44.953 回答
1

通过反射 API 教程后,您可以使用单一方法解决您的问题

private final boolean checkConstructor(Class<?> type, Class<?>... parameterTypes)  {

        try {
             forName.getConstructor(parameterTypes);
             return true;
        }catch(NoSuchMethodException e) {

        }

        return false;
    }

您必须记住的顺序paraemterTypes很重要。

您不应该在调用不知道参数类型的构造函数的地方分配信息。同样的规则也适用于你不应该在构造函数中使用 null 的代码风格。

于 2012-10-09T11:26:19.503 回答
0

getClass() 是一种正确的方法。您必须遍历所有可访问的构造函数,并根据选择构造函数及其参数的精神选择最具体的构造函数,包括在找到 0 或 >1 个构造函数时抛出异常,以及像确定方法签名中那样装箱/拆箱。由于空值,您无法从字面上实现该算法,但应尽可能接近。

于 2012-10-09T11:28:53.930 回答