java程序报错(报错信息放在最后)

java程序报错:
看报错信息是Event类没有无参构造 但是我定义了
Event类中没有对setName的定义 我也定义了
求解答!
具体的报错信息放在最后


import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/*
 * 表达式构建器——内部DSL实现
 */

/*
 * class CalendarBuilder
 * 把连贯方法放置在一个单独的生成器类中,调用普通的API接口
 */
class CalendarBuilder {
    private Calendar content = new Calendar();

    public CalendarBuilder add(String name) {
        content.addEvent(new Event());
        getCurrentEvent().setName(name);
        return this;
    }

    private Event getCurrentEvent() {
        return content.getEvents().get(content.getEvents().size() - 1);
    }

    public CalendarBuilder on(int year, int month, int day) {
        getCurrentEvent().setDate(year, month, day);
        return this;
    }

    public CalendarBuilder from(String startTime) {
        getCurrentEvent().setStartTime(parseTime(startTime));
        return this;
    }

    public CalendarBuilder to(String endTime) {
        getCurrentEvent().setEndTime(parseTime(endTime));
        return this;
    }

    private LocalTime parseTime(String time) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm");
        LocalTime localTime = LocalTime.parse(time, fmt);
        return localTime;
    }

    public CalendarBuilder at(String location) {
        getCurrentEvent().setLocation(location);
        return this;
    }

    public void show() {
        content.printAll();
    }
};

/*
 * class Event 事件类
 */
class Event {
    private String name, location;
    private LocalDate date;
    private LocalTime startTime, endTime;

    public Event() {

    }

    public Event(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDate(int year, int month, int day) {
        LocalDate date = LocalDate.of(year, month, day);
        this.date = date;
    }

    public void setStartTime(LocalTime startTime) {
        this.startTime = startTime;
    }

    public void setEndTime(LocalTime endTime) {
        this.endTime = endTime;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getName() {
        return name;
    }

    public String getLocation() {
        return location;
    }

    public LocalDate getDate() {
        return date;
    }

    public LocalTime getStartTime() {
        return startTime;
    }

    public LocalTime getEndTime() {
        return endTime;
    }
};

/*
 * class Calendar 日历类
 */
class Calendar {
    private List events = new ArrayList();

    public Event add(String name) {
        Event event = new Event(name);
        events.add(event);
        return event;
    }

    public void addEvent(Event event) {
        events.add(event);
    }

    public List getEvents() {
        return events;
    }

    public void printAll() {
        int count = 1;
        System.out.printf("事件项 %d:\n", count);
        for (Event e : events) {
            System.out.printf(e.getName(), "\n",
                    e.getDate(), "\n",
                    e.getStartTime(), "\n",
                    e.getEndTime(), "\n",
                    e.getLocation(), "\n");
            count += 1;
        }
    }
};

/*
 * 测试
 */
class internal_dsl_demo1 {
    public static void main(String[] args) {
        CalendarBuilder builder = new CalendarBuilder();
        builder
                .add("learning dsl")
                .on(2022, 9, 19)
                .from("6:00")
                .to("21:00")
                .at("workplace");
        builder
                .add("making pre")
                .on(2022, 9, 16)
                .from("10:00")
                .to("23:32")
                .at("home");
        builder
                .show();
    }
};

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The constructor Event() is undefined
The method setName(String) is undefined for the type Event

    at CalendarBuilder.add(internal_dsl_demo1.java:19)
    at internal_dsl_demo1.main(internal_dsl_demo1.java:158)

PS C:\Users\86139\Desktop\java\domain specific language demo>

我这测试的没问题,文件的类名是:internal_dsl_demo1
唯一的地方就是把第一个builder中的from中的6:00改成06:00就行了

builder
                .add("learning dsl")
                .on(2022, 9, 19)
                .from("06:00")
                .to("21:00")
                .at("workplace");

如果是写的java文件,在cmd中运行的话,参考如下:

img

cmd中运行的?最近修改的话,Event需要重新编译一下。

img

img

class定义一个Event对象 你后面来一个公共类Event方法这不冲突吗,返回类型也不需要吗?٩(๑•̀ω•́๑)۶要不把方法名改下

1、代码重新编译一下;
2、改一下这行,06:00

img

img

img


日期转换错了 0索引位置没有文本值 应该为"06:00"

Event修改一下