gpt4 book ai didi

java - 如何以更好的方式更改 java 项目中处理异常的方式?

转载 作者:行者123 更新时间:2023-11-30 06:31:22 24 4
gpt4 key购买 nike

我必须重构一个使用 Eclipse RCP 创建的 Java 程序。我的前任通过多次调用将 ViewPart 实现移交给了我要为其编写单元测试的类。出于异常处理目的移交 ViewPart。每次发生错误时,错误消息都会写入 ViewPart 的 StatusLineManager。

我现在想做的是改变这个异常处理过程,因为当我想做我的单元测试时,它给我带来了很多问题。

有没有一种方法可以将这些异常传递给 ViewPart 而无需将其传递给多个方法调用?

我最初的想法是创建某种 ExceptionMessenger 类,每次发生异常时都会对其进行初始化。但是当时我没有找到访问 ViewPart 的方法。

编辑代码示例:

class A {
void func() {
B.funcB(arg, arg1, arg2, ViewPart view):
}
}

class B {
void funcB(arg, arg1, arg2, ViewPart view) {
C.funcC(arg, arg1, ViewPart view);
}
}

class C {
void funcC(arg, arg1, ViewPart view) {
try{
doSomeThing():
catch(Exception e) {
doSomeErrorMessages(e, view);
}
}

void doSomeErrorMessages(e, ViewPart view) {
SomeOtherClass.writeToStatusLine( StatusCategory.Processing, e.getMessage(), view);
}
}

class SomeOtherClass {
void writeToStatusLine(final StatusCategory category, final String message, final ViewPart view) {
IActionBars bars = view.getViewSite().getActionBars();
IStatusLineManager statusLineManagerRef = bars.getStatusLineManager();
statusLineManagerRef.setErrorMessage(null); // clear any error msg

doWhatEver();
}
}

最佳答案

如果我对您的任务的理解正确,那么您将在两个部分处理异常:

  • 当某些异常行为发生时,Java 的异常处理。为此,您应该坚持 Java 为您提供的功能,如 Josh Bloch's Effective Java 中所述。 , 第 57 条(仅在特殊情况下使用异常(exception))。
  • 在您的工具中
  • 可视化异常(通过ViewPart)。由于这不是用于恢复或以其他方式处理异常情况的异常处理的一部分,因此我会故意不为此使用 Java 的异常处理,即避免滥用控制流的异常处理。因此,我认为您的前任传递 ViewPart 然后将异常作为参数传递给您的 ViewPart 的设计很好。

另一种方法是让异常向上抛出,然后在层/框架的某个合理边界处进行可视化。但是

  • 小心不要混淆处理上面列出的异常的两个部分
  • 如果您正在处理已检查的异常并且可以在您的调用层次结构中处理它们,这将使您的代码比向下传递 ViewPart 更难看(并且肯定会混合上面列出的两个部分)。

您在单元测试时遇到什么问题?

  • 如果 ViewPart 出现问题:mock it .
  • 如果将 ViewPart 作为参数传递给您很烦:使用一些框架来进行依赖注入(inject),例如SpringGuice .
  • 如果异常的替代可视化/处理造成麻烦:可能是 (junit-)rule解决问题?

关于java - 如何以更好的方式更改 java 项目中处理异常的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720258/

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