Java - 如何使用一种实现为自定义检查和未检查异常覆盖 getMessage()?

标签 java exception custom-exceptions

如何让 MyExceptionMyRuntimeException 使用相同的自定义 getMessage() 实现?

由于 Java 没有多重继承,我不知道该怎么做。目前我在两个类中都有重复的代码......

重要细节:getMessage() 执行类似 this.class.getName() 的操作。所以我确实需要 getMessage() 来使用反射,因为我需要对象的类名来进行本地化。

因此,要么我需要一个解决我的第一个问题的解决方案,要么需要一个关于如何在静态方法中使用反射的解决方案,因为这样我就可以使用一些实用程序类,这两个异常都可以使用?

一个解决方案可能是在一些辅助类中使用静态方法,然后使用它:

return new Object() { }.getClass().getEnclosingClass().getEnclosingClass();

不是吗?

最佳答案

尝试创建一个静态共享辅助函数来实现您的自定义 getMessage:

class MyException extends Exception {
    ....
    public String getMessage() {
        return ExceptionHelper.getMessage(this);
    }
}

class MyRuntimeException extends RuntimeException {
    ....
    public String getMessage() {
        return ExceptionHelper.getMessage(this);
    }
}

class ExceptionHelper {
    public static String getMessage(Exception e) {
        // your shared impl here
    }
}

编辑 - 如果您的 Exception 子类不仅仅是在它们之间复制粘贴的 getMessage 实现,您可能还想共享它。将上面的静态助手变成封装类的轻微调整将很好地处理这个问题。

例如:创建一个名为 ExceptionDetails 的类,共享代码和变量(以及任何其他重复项)可以存在于其中,并且每个 Exception 子类都有自己的 ExceptionDetails 实例

关于Java - 如何使用一种实现为自定义检查和未检查异常覆盖 getMessage()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164901/

相关文章:

java - 哪个版本的tomcat与Java 1.6兼容

google-maps - flutter :谷歌地图状态错误(坏状态: future 已经完成)

php - 处理期望 catch block - xdebug

java - 用户定义异常 : when do we use them? 什么是 "exceptional"情况?

python - 带有错误代码和错误消息的自定义 Python 异常

java - Java 中的函数链

java - 在 Windows 10 命令提示符下运行 Java 程序

java - 加快对mysql的操作

java - 哪个更好/更有效 : check for bad values or catch Exceptions in Java

java - if for 循环抛出自定义异常