在Java(GWT)中处理异常

在Java(GWT)中处理异常,java,exception,gwt,exception-handling,error-handling,Java,Exception,Gwt,Exception Handling,Error Handling,我目前正在处理异常处理,我想知道应该在哪里捕获它们 以下是GWT应用程序中的堆栈: 具有可抛出NumerFormatExeption的方法的帮助器 (FormHelper.java) 使用此帮助程序的小部件(CostWidget.java) 调用此小部件以检索数据的presenter(BuildingPresenter.java) FormHelper.java public static Integer prepareIntegerForDb(String string) { re

我目前正在处理异常处理,我想知道应该在哪里捕获它们

以下是GWT应用程序中的堆栈:

  • 具有可抛出NumerFormatExeption的方法的帮助器 (FormHelper.java)
  • 使用此帮助程序的小部件(CostWidget.java)
  • 调用此小部件以检索数据的presenter(BuildingPresenter.java)
FormHelper.java

public static Integer prepareIntegerForDb(String string) {
    return Integer.parseInt(string);    
}
CostWidget.java

public DetailCostProxy getCostDetail() { 
    ...
    costDetail.setQuantity(FormHelper.prepareDoubleForBd(qtTextBox.getText()));
    ...
    return costDetail;
}


public List<DetailCostProxy> getCostList() {
    ...
    costDetails .add(ligneCout.getCostDetail());
    ...
}
public DetailCostProxy getCostDetail(){
...
setQuantity(FormHelper.prepareDoubleForBd(qtextbox.getText());
...
返回成本明细;
}
公共列表getCostList(){
...
添加(ligneCout.getCostDetail());
...
}
BuildingPresenter.java

public void saveBuilding(final BuildingProxy inter, final CollectRequestContext savecontext) {

    savecontext.save(display.getCostWidget().getCoutList()).fire(new Receiver<BuildingProxy >() {....

}
public void saveBuilding(final BuildingProxy inter,final CollectRequestContext savecontext){
savecontext.save(display.getCostWidget().getCoutList()).fire(new Receiver(){…)。。。。
}
我在想:

1) 将“抛出NumberFormatException”添加到帮助程序中的prepareIntegerForDb()

2) 将“抛出NumberFormatException”添加到小部件中的getCostDetail()

3) 将“抛出NumberFormatException”添加到小部件中的getCostList()

4) 在演示者中缓存异常(在saveBuilding中)

目的是:

  • 记录异常
  • 向用户提供一条消息,说明出现了问题
考虑到在一个示例中,我必须将此模式应用于整个应用程序(超过20名演示者),您对这种方法有何看法

我的方法是处理GWT中异常的好方法吗?还是应该直接将错误记录在helper或其他地方

考虑到这一点,您如何看待这种方法 例如,我必须将此模式应用到整个应用程序中 (20多名演讲者)

添加
抛出NumberFormatException
声明不会帮助您“向用户提供一条消息,说明出现了问题”。
NumberFormatException-s
RuntimeException-s
,因此
抛出
声明甚至不会强制在使用这些方法的代码中执行
try/catch

我的方法是处理GWT中异常的好方法吗?还是应该记录 直接在助手中或其他位置出错

4) 捕获演示者中的异常(在saveBuilding中)

目的是:

  • 记录异常

  • 向用户提供一条消息,说明出现了问题

这个问题并不特定于GWT

如果您知道如何处理异常,那么捕获异常是一个好主意

如果向用户发送错误信号,则需要让用户决定如何处理该问题(例如,弹出消息建议两个操作以恢复应用程序执行)

考虑到这一点,您如何看待这种方法 例如,我必须将此模式应用到整个应用程序中 (20多名演讲者)

添加
抛出NumberFormatException
声明不会帮助您“向用户提供一条消息,说明出现了问题”。
NumberFormatException-s
RuntimeException-s
,因此
抛出
声明甚至不会强制在使用这些方法的代码中执行
try/catch

我的方法是处理GWT中异常的好方法吗?还是应该记录 直接在助手中或其他位置出错

4) 捕获演示者中的异常(在saveBuilding中)

目的是:

  • 记录异常

  • 向用户提供一条消息,说明出现了问题

这个问题并不特定于GWT

如果您知道如何处理异常,那么捕获异常是一个好主意


如果向用户发送错误信号,则需要让用户决定如何处理该问题(例如,一条弹出消息建议恢复应用程序执行的两个操作)。

prepareIntegerForDB()引发异常。当Integer.parse()失败,并且您不必实际抛出异常

getCostDetail()应该显式地捕获和抛出异常,并可能扩展抛出异常的原因。类似于“成本不是可读的格式”。该方法只负责这一行

getCostList()捕获并处理异常。该方法负责整个收集。如果不在此处处理坏数据,则会丢失好数据。以下是处理坏数据的一种方法

public List<DetailCostProxy> getCostList() {
    ...

    try {
        DetailCostProxy cost = lineCount.getCostDetail()
        costDetails.add(cost);
    catch (NumberFormatException e) {
        costDetails.add(null);
    }

    ...
}
public List getCostList(){
...
试一试{
DetailCostProxy成本=lineCount.getCostDetail()
成本详情。添加(成本);
捕获(数字格式){
costDetails.add(空);
}
...
}

最后,向用户显示数据的方法应该在显示数据之前解释传递给它的数据。如果使用上面的示例,这将与检查空值一样简单。

prepareIntegerForDB()应该抛出该异常。当Integer.parse()失败时,这会自动发生,您不必实际抛出该异常

getCostDetail()应该显式地捕获和抛出异常,并可能扩展抛出异常的原因。类似于“成本不是可读的格式”。该方法只负责这一行

getCostList()应该捕获并处理异常。该方法负责整个收集。如果不处理坏数据,她将