java - 在枚举中使用反射但总是得到 NoSuchMethodException

标签 java reflection enums talend

我正在为 Talend Open Studio 构建一个自定义组件,以访问来自应用程序 (JIRA) 的数据源,该应用程序具有用于获取其所有数据的包装器。它为所有数据结构公开了一个充满非常不稳定的 getter 的 API。由于 Talend Open Studio 仅支持原始类型,我通常需要链接多个调用以获取原始数据(即 Project.getProjectDetail().getOwner().getName())

但是这些 API 经常变化,我不想每次都更改我的代码。所以我决定使用枚举方法:当一个新字段被暴露时,我只需要在枚举中添加一个元素。类似的东西:

(为了简洁起见,我删减了大部分元素)

public enum JiraProjectField {

    KEY(new String[]{"getKey"}),
    COMPONENTS_NUM(new String[]{"getComponents", "size"}),

    private Method[] m;
    private ArrayList<Class<?>> r;

    private JiraProjectField(String[] methods) {

        this.r = new ArrayList<Class<?>>(methods.length);

        Class<?> initClass = Project.class;
        for(int i=0; i< methods.length; i++){
            try {
                m[i] = initClass.getMethod(methods[0], (Class<?>)null);
                r.add(m[i].getReturnType());
                initClass = m[i].getReturnType();
            } catch (SecurityException e) {
                throw new ExceptionInInitializerError(e.toString());
            } catch (NoSuchMethodException e) {
                throw new ExceptionInInitializerError(e.toString());
            }
        }
}

但我总是得到一个 NoSuchMethodException,即使我确定具有该名称的方法存在。有什么我不知道的吗?

最佳答案

我不确定你为什么不更多地使用 varargs 但你可以试试

m[i] = initClass.getMethod(methods[i]);

关于java - 在枚举中使用反射但总是得到 NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14348789/

相关文章:

go - 将字符串解析为枚举的最佳方法

java - 如何添加默认构造函数

java - 我们能用java设计一个真正的单例类吗?

java - 如何在没有 kotlin 编译器警告的情况下将 Class<*> 与 Java 盒装原始类型进行比较

c# - 如何检查属性 setter 是否公开

swift - 两个枚举的单独常见情况 - Swift

java - 为什么 java.util.concurrent.TimeUnit.convert 抛出 AbstractMethodError 而不是抽象

java - haskell/Java 中的类型变量是什么

java - 在 Java 中如何查找两个列表的相似程度?

java - Hive:将小写字母应用于数组