我有一堂课如下:
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;
}
因为这只是跳过了我在私人二传手中的验证。
老实说,我可以找到很多方法让它与非传统方法一起使用,但我只需要帮助清理它以适应适当的类设计约定。