我正在为 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,即使我确定具有该名称的方法存在。有什么我不知道的吗?