我之前写过一个由7个班级组成的完整成功的程序(Date
,Address
,Time
,Customer
,Course
,InClassCourse
,OnLineCourse
),接口(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
有一个方法CreateFiles
和writeCustomers
。
我不熟悉异常并且还在学习。要修改我的程序,我想添加一个名为writeCourses
的用户指定的异常。如果客户的列表中没有任何课程(我的几个客户未参加任何课程),CustomerNotEnrolledException
课程中的createInvoice
方法将抛出Customer
,然后处理此问题我的测试类中的异常。
我的问题是如何在try块中编写语句来检查客户是否注册了任何课程,如果没有将其删除。我需要这样做因为我之后已经淘汰了未注册的客户,我将在测试用例中添加方法CustomerNotEnrolledException
,readCustomers
和readCourses
,并使用它们来阅读 customers.txt 文件和 courses.txt 文件来创建客户并将其添加到generateInvoice
,以及创建将添加到其各自客户的课程。
我已经创建了一个名为customerList
的异常类,它扩展了异常:
CustomerNotEnrolledException
我原来的createInvoice方法如下所示:
public class CustomerNotEnrolledException extends Exception
{
public CustomerNotEnrolledException()
{
super("Customer not enrolled");
}
答案 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);
}
}
然后将此异常导入到您打算使用它的类中。