1

私は次のような機能を持っています

class Chainable {
    public Chainable doStuff(String test) {
        return doSomething(test, true);
    }

    public Chainable doStuff(String test, String test2) {
        String toUse = test + test2;
        return doSomething(toUse, false);
    }

    private Chainable doSomething(String test, boolean version) {
        // do something
        if (somethingBadHappened) {
            throw SpecialException.generate();
        }

        return this;
    }
}

SpecialExceptionユーザーが見るはずの例外です。例外のメッセージには、この例外をスローしたメソッドが意図的に含まれています。ユーザーが呼び出しdoSomething("x")、失敗した場合は が表示され"Method 'doSomething' failed with the parameters: 'test = x | version = true'"ます。

doSomething(String, boolean)しかし、ユーザーはメソッドとそのパラメーターを気にしません。彼doStuff(String)はその機能のメッセージを使用しており、見たいと思っています。

だから私がすることは次のとおりです。

public Chainable doStuff(String test) {
    try {
        return doSomething(test, true);
    } catch (SpecialException e) {
        throw SpecialException.generate(e);
    }
}

これにより、新しい例外の原因として e が設定され、正しく表示されます"Method 'doStuff' failed with the parameters: 'test = x'"(ユーザーにはスタック トレースは表示されませんが、デバッグする必要がある場合は、正確に何が起こったかを確認できます)。

現在は機能していますが、作業をヘルパー関数に委譲する新しい関数を作成するたびに、同じことを繰り返す必要があります。SpecialException問題は、生成された場所に応じてメソッド名を見つけるため、これにヘルパー関数を使用する方法がわからないことです...

これを行う別のより良い方法はありますか?

4

2 に答える 2

0

すべきことは次のとおりです: スタック トレースをユーザーに表示します。その後、使用できます

throw new SpecialException();

どのメソッドが表示されるかを気にする必要はありません。

于 2013-07-26T09:52:05.240 に答える