GroovyRuntimeException:模糊方法重载

时间:2017-02-11 15:45:46

标签: groovy

我正在开发一个大型代码库,用Java编写90%,用Groovy编写10%。我最近才开始学习Groovy,并希望得到一些建议。我在Groovy方法中遇到过这样的代码:

throw new RuntimeException(getErrorMessage(state));

大部分时间都可以使用。问题是,在极少数情况下,getErrorMessage(state)返回null而不是String。我无法更改getErrorMessage()的实现。

我可以解决这个特殊问题:

throw new RuntimeException((String) getErrorMessage(state));

或者像这样:

throw new RuntimeException(getErrorMessage(state) ?: '(no detail available)');

如果我使用@CompileStatic,则不会出现此问题,但代码的其他部分依赖于动态功能。

我的问题是我只能通过错误报告来解决这些问题,这对应用程序的可靠性和声誉不利。 (问题不仅在于getErrorMessage,还在于运行时可能发生模糊过载异常的所有可能情况。)

我如何事先预见到这些问题? (目前可用的静态分析工具似乎不够聪明,无法捕捉到这一点。)

1 个答案:

答案 0 :(得分:1)

搜索所有getErrorMessage()并将其替换为myGetErrorMessage()

public String myGetErrorMessage(int state) {
    return getErrorMessage(state) ?: '(no detail available)';
}
对于这个特殊情况,

Aspect-Oriented Programming可能有点过分,但它会让你得到你想要的东西。您仍然需要以某种方式识别需要干预的所有方法。 This是一篇描述几个AOP库的文章。