三千越甲可吞吴、 2022-09-20 06:52 采纳率: 66.7%
浏览 112
已结题

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<Event> events = new ArrayList<Event>();

    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<Event> 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>

  • 写回答

6条回答 默认 最新

  • Java大魔王 2022-09-20 08:39
    关注

    我这测试的没问题,文件的类名是: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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 赞助了问题酬金10元 9月20日
  • 创建了问题 9月20日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助