如何让 MyException
和 MyRuntimeException
使用相同的自定义 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/