Java 在枚举内使用反射,但始终获取NoSuchMethodException

Java 在枚举内使用反射,但始终获取NoSuchMethodException,java,reflection,enums,talend,Java,Reflection,Enums,Talend,我正在为Talend Open Studio构建一个自定义组件,以便从应用程序(JIRA)访问数据源,该应用程序有一个包装器来获取其所有数据。它公开了一个API,其中包含所有数据结构的非常不稳定的getter。由于Talend Open Studio仅支持基元类型,因此我通常需要链接多个调用以获取基元数据(即Project.getProjectDetail().getOwner().getName()) 但是这些API经常变化,我不想每次都改变我的代码。因此,我决定使用方法枚举:当暴露一个新字段

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

但是这些API经常变化,我不想每次都改变我的代码。因此,我决定使用方法枚举:当暴露一个新字段时,我只需要向枚举中添加一个元素。诸如此类:

(我将大部分元素删减为简洁)

public enum JiraProjectField{
键(新字符串[]{“getKey”}),
COMPONENTS_NUM(新字符串[]{“getComponents”,“size”}),
私有方法[]m;
私有ArrayList>(methods.length);
Class initClass=Project.Class;
for(int i=0;i

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

我不知道你为什么不更多地使用varargs,但你可以试试

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

目前还不清楚枚举必须做什么。你是说这段代码在枚举之外工作吗?如果你能给出一个简短但完整的失败例子,那会很有帮助。这个方法的签名是什么?确定它是公共类中的一个公共方法吗?“有什么我不知道的吗?”有人听到托马斯·爱迪生说“我们对任何事情都不知道百万分之一。”。所以我希望答案是。是的,我甚至不知道有多少我不知道啊,是的,它
getMethod(方法[0],新类[]{null})实际上看起来像是未指定的行为。+1,这比我想象的要容易得多。问题在于那个演员班;移除铸件解决了问题。然而,我想知道我是否能找到更好的设计(一个方法数组而不是字符串数组?一个varargs原型?不是这样的吗?)您将能够在Java8中使用它,因为它有第一类方法对象。i、 e.您可以引用一个方法并访问它,而无需显式使用反射。
m[i] = initClass.getMethod(methods[i]);