Java - 如何使用一个实现覆盖getMessage()以获取自定义检查和未检查的异常?

xst*_*ing 2 java exception custom-exceptions

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

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

重要细节:getMessage()像this.class.getName()这样的东西.所以我确实需要getMessage()使用反射,因为我需要对象的类名进行本地化.

所以要么我需要一个解决方案来解决我的第一个问题,要么解决如何在静态方法中使用反射的原因然后我可以使用一些两个例外都可以使用的实用程序类?

一个解决方案可能是某个帮助器类中的静态方法,然后使用它:

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

不是吗?

Kre*_*ase 6

尝试创建一个静态共享帮助函数来实现自定义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
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑 - 如果您的Exception子类不仅仅是getMessage在它们之间复制粘贴的impl ,您可能也想要共享它.稍微调整上面的内容以将静态助手转换为封装类将很好地处理这个问题.

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