首页 > 解决方案 > 使用自定义异常并在最终常量中定义它

问题描述

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

我的自定义例外:-

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");
}

现在如上所示,我在课堂上进行了多次检查,所以我打算保留一个单独的最终类,我可以在其中保持这个常量,稍后我可以在上面的类中使用相同的常量,请定义哪种方法我应该选择也请定义我也可以在这里使用枚举吗

标签: java

解决方案


与其使用常数并从数据领域的角度思考,不如尝试采用更面向对象的方法并从行为的角度思考。

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

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

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;
}

等等。


推荐阅读