У меня есть класс следующим образом:Правильный способ установить даты класса с проверкой
class Date
{
// Field variables
private int day;
private int month;
private int year;
// Default constructor
public Date()
{
year = 2015;
day = 0;
month = 0;
}
// Overloaded constructor
public Date(int _day, int _month, int _year)
{
setDay(_day);
setMonth(_month);
setYear(_year);
}
// Accessors
public int getDay()
{
return day;
}
public int getMonth()
{
return month;
}
public int getYear()
{
return year;
}
// Mutators
public void setMonth(int _month)
{
if (_month > 0 && _month <= 12)
{
month = _month;
}
}
public void setYear(int _year)
{
if (_year >= 1700 && _year <= 2015)
{
year = _year;
}
}
public void setDay(int _day)
{
if (_day > 0 && _day <= DateTime.DaysInMonth(year, month))
{
day = _day;
}
}
часть, которая не работает, заключается в проверке мой день внутри метода setDay()
. DateTime.DaysInMonth(year, month)
(Метод проверяет, сколько дней в конкретный месяц в данном году для учета високосных годов и февраля) вызывает от значения конструктора по умолчанию 0 за несколько месяцев до того, как данные пользователя/приложения пройдут, чтобы присвоить ему что-то между 1 и 12. Я не могу использовать DateTime для проверки всего этого, потому что приложение настроено таким образом, чтобы пользователи могли вводить 0 значений за день или месяц, что в свою очередь не печатает день или месяц в конечном формате.
Одно из предложений заключалось в том, чтобы сделать мои сеттеры конфиденциальными и сделать один общедоступный метод setDate для пользователей, который позволит им устанавливать день, месяц и год в любом порядке ... Но я не могу точно это реализовать :
public void setDate(int _day, int _month, int _year)
{
day = _day;
month = _month;
year = _year;
}
потому что это просто пропускает мою проверку в моих частных сеттерах.
Я могу честно найти много способов, чтобы получить эту работу с не convetional методами, но я просто нужна помощь очистки все это, чтобы соответствовать правильной конструкции класса конвенции ..
Измените порядок своего конструктора, чтобы в первую очередь установить месяц и год. Если вы разрешаете месяц/год быть нулевым, то вам нужно учитывать это в вашей процедуре 'setDay'. – entropic