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>