我试图拦截我的算法在Java中抛出的Exception
,并将文本更改为另一种语言,并将其显示给用户。这在java中可能吗?
抱歉我的英语。
最佳答案
您可以捕获一个异常,然后抛出一个相同类型的新异常(如果您愿意,也可以抛出不同类型的异常)。然后翻译原始异常中的消息并将其传递到新异常中。类似以下内容(未经测试):
try {
// do something
}
catch (Exception e) {
throw new Exception(translate(e.getMessage()))
}
public String translate(String message) { /* translation code */ }
更新以回应评论:
如果您可以修改应用程序(特别是如果应用程序使用从几个基类派生的自定义异常),那么您也许可以修改这些应用程序以检索翻译后的消息(但如果您可以这样做,您可以从一开始就构建翻译后的消息或完整的 internationalisation !)。
全局拦截和替换所有异常可能是不可能的,尽管看起来您至少可以使用调试 Hook 全局检测它们 - 请参阅 this answer 。可以想象,您可以使用反射即时修改异常消息,但这听起来很糟糕。
最后一种可能性是使用面向方面编程 (AOP) 来编译引发异常的代码周围的额外行为(例如,请参阅 this question )。不过,您需要使用 AOP 工具重新编译整个应用程序,并且可能仍然需要稍微修改应用程序代码。
关于java - 拦截异常并将其翻译为另一种语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28836811/