Вам нужен правильный toString()
метод и локализованное название дня недели.
Этого можно добиться с помощью метода getDisplayName(TextStyle, Locale)
, который я покажу в приведенном ниже коде.
Есть еще одна вещь, которая подходит для чтения вашего задания:
Крайний срок не может быть в субботу или воскресенье - если это произойдет, исключение (IllegalArgumentException) с сообщением о неподходящей дате (в формате dd.mm.yyyy).
==> Не выдается IllegalArgumentException
, в вашем коде даже нет проверки недействительных дней недели. Exception
волшебным образом не появится, вы должны его реализовать.
Вот пример решения:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;
public class Deadline {
private LocalDate deadline;
public Deadline(LocalDate deadLine) {
// check if the given date is a Saturday or Sunday and throw the desired Exception
if (deadLine.getDayOfWeek() == DayOfWeek.SATURDAY
|| deadLine.getDayOfWeek() == DayOfWeek.SUNDAY) {
throw new IllegalArgumentException("The deadline to be set is not valid ("
+ deadLine.getDayOfWeek()
.getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
+ ", "
+ deadLine.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
+ "). Please provide a deadline which is a weekday.");
} else {
// otherwise just set the deadline
this.deadline = deadLine;
}
}
public LocalDate getDeadline() {
return deadline;
}
public void setDeadline(LocalDate deadline) {
if (deadline.getDayOfWeek() == DayOfWeek.SATURDAY
|| deadline.getDayOfWeek() == DayOfWeek.SUNDAY) {
throw new IllegalArgumentException("The deadline to be set is not valid ("
+ deadline.getDayOfWeek()
.getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
+ ", "
+ deadline.format(DateTimeFormatter.ofPattern("dd.MM.yyyy"))
+ "). Please provide a deadline which is a weekday.");
} else {
this.deadline = deadline;
}
}
@Override
public String toString() {
return deadline.getDayOfWeek()
.getDisplayName(TextStyle.FULL_STANDALONE, Locale.getDefault())
+ ", "
+ deadline.format(DateTimeFormatter.ISO_LOCAL_DATE);
}
public static void main(String[] args) {
// this is now a Saturday, which will throw the IllegalArgumentException
Deadline first = new Deadline(LocalDate.parse("2017-02-04"));
System.out.println(first.toString());
}
}
Обратите внимание, что вам не обязательно использовать локализованное отображаемое имя enum DayOfWeek
, но это может быть полезно. Вы также можете просто вызвать setDeadline(deadline)
в параметризованном конструкторе вместо того, чтобы писать там ту же обработку ошибок, но если вы решите не делать этого, вам придется сохранить избыточный код.