如何编写语句来检查我的用户指定的异常CustomerNotEnrolledException

时间:2015-03-01 18:06:41

标签: java exception arraylist exception-handling throws

我之前写过一个由7个班级组成的完整成功的程序(DateAddressTimeCustomerCourseInClassCourseOnLineCourse),接口(Invoice),当然还有测试类(CustomerTest)。接口Invoice有一个方法createInvoice,它在Customer类中实现。在测试案例中,我创建了3个新客户,添加了他们各自的课程,然后根据他们注册的课程数量,他们注册的课程类型以及课程是否为{{1}来计算他们的学费。 }或InClassCourse,最后在对话框中打印出信息。客户和课程列表保存在两个单独的数组列表中:

OnLineCourse

使用增强的for循环,我以多态方式遍历ArrayList<Customer> customerList = new ArrayList<Customer>(); ArrayList<Course> courseList = new ArrayList<Course>(); 并为每个客户创建了发票。 我现在写了一个额外的课程customerList,其中包含一个新的客户和课程列表,它将客户数据写入文件 customers.txt ,课程数据写入文件 courses.txt 即可。 CreateFiles有一个方法CreateFileswriteCustomers

我不熟悉异常并且还在学习。要修改我的程序,我想添加一个名为writeCourses的用户指定的异常。如果客户的列表中没有任何课程(我的几个客户未参加任何课程),CustomerNotEnrolledException课程中的createInvoice方法将抛出Customer,然后处理此问题我的测试类中的异常。

我的问题是如何在try块中编写语句来检查客户是否注册了任何课程,如果没有将其删除。我需要这样做因为我之后已经淘汰了未注册的客户,我将在测试用例中添加方法CustomerNotEnrolledExceptionreadCustomersreadCourses,并使用它们来阅读 customers.txt 文件和 courses.txt 文件来创建客户并将其添加到generateInvoice,以及创建将添加到其各自客户的课程。

我已经创建了一个名为customerList的异常类,它扩展了异常:

CustomerNotEnrolledException

我原来的createInvoice方法如下所示:

  public class CustomerNotEnrolledException extends Exception
  {
      public CustomerNotEnrolledException()
      {
         super("Customer not enrolled");
      }

2 个答案:

答案 0 :(得分:1)

首先,修改方法createInvoice(),如下所示:

public String createInvoice() throws CustomerNotEnrolledException {

    if ((this.courseList == null) || (this.courseList.isEmpty())) {
        throw new CustomerNotEnrolledException("Customer does not have any course");
    }

    // rest of your method goes here
}

然后,在每个调用createInvoice()方法的类中,您必须使用捕获CustomerNotEnrolledException的try块包围调用:

Customer customer = ...; // get the customer from some place
try {

    // some code here

    customer.createInvoice();

    // more code here

} catch (CustomerNotEnrolledException e) {
    // handle CustomerNotEnrolledException here, maybe show error message?
    System.out.println("Exception creating invoice for customer " + customer.getName() + ": " + e.getMessage());
}

如果createInvoice()在课程列表中没有任何课程,则CustomerNotEnrolledException会抛出createInvoice()。这只是对应该发生什么的猜测,因为我事先并不知道这个问题。而且,我认为正确实施逻辑是你的工作。

由于CustomerNotEnrolledException方法会引发已检查的异常,在这种情况下为createInvoice(),调用CustomerNotEnrolledException 的方法必须处理try/catch例外,例如我在示例中显示的CustomerNotEnrolledException块,或者声明该方法在其签名中抛出createInvoice()(例如{{1}}方法确实)。

答案 1 :(得分:0)

我相信你可以将'Exception'扩展到一个看起来有点像这样的新创建的类中。

public class CustomerNotEnrolledException extends Exception {

      public CustomerNotEnrolledException(String message) {
           super(message);
      }

      public CustomerNotEnrolledException(String message, Throwable throwable) {
           super(message, throwable);
      }

}

然后将此异常导入到您打算使用它的类中。