You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:00:03