Calendar类的静态常量和set()、get()方法为什么可以改变其值
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR, 2013);//设置年份
c.set(Calendar.MONTH, 1);//设置月份
int day=c.getActualMaximum(Calendar.DATE);//获得本月的天数
求解:Calendar类中YEAR、MONTH等是一个个的静态的常量,为什么Calendar类中的set()方法可以设置其值,设置的到底是一个什么的值呢?
------解决方案--------------------
Calendar是个抽象类,你可以理解Calendar.Month为子类的一个属性,c.set(Calendar.Month,1)的意思就是一个Calendar实体类对象的Month属性为2
------解决方案--------------------Calendar.YEAR, Calendar.MONTH 等都是作为 key 来使用的。
设想你来实现 Calendar 类,对于设置其状态的方法,你可以这么写:
public void setYear(int year){ ... }
public void setMonth(int month){ ... }
... ...
这样写,最终你要写很多个方法,
或者,你只写一个 set() 方法,然后让它接受两个参数,第一个参数表示你要设置哪个状态,第二个参数表示值:
public void set(int key, int value);
对于其中的 key , 你规定: 0 表示 年, 1 表示 月 …………………… 等等,
然后你发现,你的规定只有你知道,用户不愿意去记那么多,所以你把它们写成公共静态常量:
public static final int YEAR = 0;
public static final int MONTH = 1;
... ...
用户就可以这么调用: c.set(Calendar.YEAR, 2013);
而不是只能这么写了: c.set(0, 2013);
这样用户只要去记名字而不用去记数字,同时也提高了可读性。
Calendar 这个类有年头了,如果现在写的话,更好的方案不是用int来做key,而是用enum。