使用自定义异常并在最终常量中定义它

时间:2018-06-10 08:16:49

标签: java

我已经定义了自定义异常类,后来我在我的其他类中使用它,我将抛出该异常,如下所示

我的自定义例外: -

public class AaestroCardNetworkException  extends Exception {
    public AaestroCardNetworkException(String message) {
            super(message);
    }
}

在后面的部分我正在使用它,如下所示

        TTTM_DB_LIST = astmDAO.getRTTMDBList(Code, "AE");
if (RTTM_DB_LIST.isEmpty()) {
    throw new masterCardNetworkException(" Job code is null in database");
}

现在如上图所示,我在班上多次进行这项检查,所以我打算保留一个单独的最后一班,我可以保持这个不变,之后我可以在上面的课程中使用相同的常数,请定义我应该选择哪种方法请定义我也可以在这里使用Enum

1 个答案:

答案 0 :(得分:0)

不要使用常量并根据数据字段进行思考,而是尝试采用更加面向对象的方法并根据行为进行思考。

您需要某种对象来为您提供某些内容列表,并且在某些情况下它的状态不正确,因此您必须抛出异常来表示这种情况。

这是(为了举例,我发明了一些其他依赖的类型):

public interface Rttms {
  List<Rttm> rttms() throws AaestroCardNetworkException;
}

现在你需要一个实现,我不知道你如何准确地检索这个列表的内容,但这就是它发生的地方:

public class DbRttms implements Rttms {
   private final Database db;
   public DbRttms(Database db) {
       this.db = db;
   }

   public List<Rttm> rttms() throws AaestroCardNetworkException {
      if (/* can't retrieve list from db */) {
          throw new masterCardNetworkException(" Job code is null in database");
      } else {
          return /* the list */
      }
   }
}

一旦你有了这个,你可以有一个静态常量,在你的代码中的某个地方保存这个对象,或者你可以传递它,它是你想要的(我建议避免静态,但这是另一个故事)。

如果您不想每次都检索它,而只是第一次检索它,您可以编写一个缓存其值的类的实现:

public class CachedRttms implements Rttms {
  private final Rttms origin;
  private List<Rttm> cached;
  public CachedRttms(Rttms origin) {
    this.origin = origin;
  }

  public List<Rttm> rttms() throws AaestroCardNetworkException {
    if (this.cached == null) {
      this.cached = this.origin.rttms();
    }
    return this.cached;
}

等等。