1

Talend Open Studioのカスタムコンポーネントを構築して、すべてのデータを取得するラッパーを持つアプリケーション(JIRA)からデータのソースにアクセスします。すべてのデータ構造に対して非常に揮発性の高いゲッターでいっぱいの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が発生します。わからないことはありますか?

4

1 に答える 1

3

なぜvarargsをもっと使用しないのかわかりませんが、試すことができます

m[i] = initClass.getMethod(methods[i]);
于 2013-01-15T23:44:49.280 に答える