我正在开发一个大型代码库,用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
,还在于运行时可能发生模糊过载异常的所有可能情况。)
我如何事先预见到这些问题? (目前可用的静态分析工具似乎不够聪明,无法捕捉到这一点。)
答案 0 :(得分:1)
搜索所有getErrorMessage()
并将其替换为myGetErrorMessage()
:
public String myGetErrorMessage(int state) {
return getErrorMessage(state) ?: '(no detail available)';
}
对于这个特殊情况,Aspect-Oriented Programming可能有点过分,但它会让你得到你想要的东西。您仍然需要以某种方式识别需要干预的所有方法。 This是一篇描述几个AOP库的文章。