Java分层架构课程名称重复校验异常排查求助
问题排查:Java课程模块重复名称异常问题
问题描述
使用Java分层架构模拟网站的讲师、课程和分类模块,要求课程名称不可重复,但即便尝试添加不同名称的课程,仍持续抛出异常:
Exception in thread "main" java.lang.Exception: Course name cannot be the same!
以下是相关代码:
相关代码
CoursesManager类
package business; import core.logging.IBaseLogger; import dataAccess.ICoursesDao; import entities.Courses; import java.util.List; public class CoursesManager { private ICoursesDao coursesDao; private IBaseLogger[] loggers; private List<Courses> coursesList; public CoursesManager(ICoursesDao coursesDao,IBaseLogger[] loggers,List<Courses> coursesList){ this.coursesDao = coursesDao; this.loggers = loggers; this.coursesList = coursesList; } public void add(Courses courses) throws Exception { if (courses.getCoursePrice() < 0) { throw new Exception("Course price cannot be less than 0!"); } for (Courses checkCourses : coursesList) { if (courses.getCourseName().equals(checkCourses.getCourseName())) { throw new Exception("Course name cannot be the same!"); } } coursesDao.add(courses); coursesList.add(courses); for (IBaseLogger logger : loggers) { logger.log(courses.getCourseName()); } } }
Main类
import business.CategoriesManager; import business.CoursesManager; import core.logging.DatabaseLogger; import core.logging.FileLogger; import core.logging.IBaseLogger; import core.logging.MailLogger; import dataAccess.HibernateDao; import dataAccess.JdbcDao; import entities.Categories; import entities.Courses; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) throws Exception { Courses course1 = new Courses(1,"Java",10); Courses course2 = new Courses(2,"C#",200); Courses course3 = new Courses(3,"Html&Css",300); List<Courses> coursesList = new ArrayList<>(); coursesList.add(course1); coursesList.add(course2); coursesList.add(course3); IBaseLogger[] loggers = {new FileLogger(),new DatabaseLogger(),new MailLogger()}; CoursesManager coursesManager = new CoursesManager(new HibernateDao(),loggers,coursesList); coursesManager.add(course1); System.out.println("-------------------------------------"); Categories categories1 = new Categories("Back-end"); Categories categories2 = new Categories("Mobile"); Categories categories3 = new Categories("Front-end"); List<Categories> categories = new ArrayList<>(); categories.add(categories1); categories.add(categories2); categories.add(categories3); CategoriesManager categoriesManager = new CategoriesManager(new JdbcDao(),loggers,categories); categoriesManager.add(categories1); } }
错误原因
代码的校验逻辑本身没有问题,异常触发是因为测试逻辑错误:
- 在Main方法中,你预先将
course1添加到了coursesList(作为已存在的课程列表),随后又调用coursesManager.add(course1)尝试再次添加同一个课程对象,此时校验逻辑检测到列表中已有同名课程,自然抛出重复异常。 - 如果你误以为添加不同名称的课程会触发异常,那是因为你实际测试的是添加已存在的课程,而非不同名称的新课程。
解决方案
根据你的测试需求,有两种调整方式:
1. 测试重复名称校验逻辑(预期抛出异常)
保留现有coursesList的初始化,尝试添加一个名称与已有课程重复的新课程:
// 初始化已有课程列表 List<Courses> coursesList = new ArrayList<>(); coursesList.add(course1); coursesList.add(course2); coursesList.add(course3); // 新增名称重复的课程,预期触发异常 Courses course4 = new Courses(4,"Java",50); coursesManager.add(course4);
2. 测试新增不重复课程的正常流程
修改Main中的代码,确保要添加的课程不在预先初始化的coursesList中:
// 初始化已有课程列表(不包含course1) List<Courses> coursesList = new ArrayList<>(); coursesList.add(course2); coursesList.add(course3); // 新增course1,此时列表中无同名课程,正常执行 coursesManager.add(course1);
或者,将coursesList作为新增课程的存储容器(初始为空),依次添加课程:
List<Courses> coursesList = new ArrayList<>(); CoursesManager coursesManager = new CoursesManager(new HibernateDao(),loggers,coursesList); // 依次添加不重复的课程,均正常执行 coursesManager.add(course1); coursesManager.add(course2); coursesManager.add(course3); // 此时再添加course1才会触发重复异常 coursesManager.add(course1);
内容的提问来源于stack exchange,提问作者doguyaras
相关产品推荐
相关产品推荐

