我有类似的功能
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
它会根据生成的位置找到方法名称......
还有另一种更好的方法吗?