gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:00:54 28 4
gpt4 key购买 nike

如何让 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com