11
回答
java的Calendar类为什么定义一个常量,下面的add方法就能直接使用1来代替YEAR了?
注册华为云得mate10,2.9折抢先购!>>>   

java的Calendar类为什么定义一个常量,下面的add方法就能直接使用1来代替YEAR了?

就是为什么常量值可以代替常量名?

<无标签>
举报
Jordan裔
发帖于2周前 11回/244阅
共有11个答案 最后回答: 1周前
这里面其实有历史原因 Calendar这个类比较早 在1.5之前 那时候enum还不是java的标准 所以通过这种方法来实现一些枚举类的功能 ;Calendar类是为了解决Date类的问题而设计的,但实际上它的API设计得也不够友好 比如无法很好的解决时区问题 现在更好的做法是使用java8之后加入的java.time

当然是可以,add方法传int类型,常量是int,单独传1也是int,没毛病,只不过直接传1的话碰上对源码不熟的会有些懵

--- 共有 3 条评论 ---
linwoain不是1指向YEAR,而是YEAR指向1 2周前 回复
风吹屁屁凉 回复 @Jordan裔 : 这个1只是个标识,常量里的YEAR也是1,而且1也没有指向YEAR,你可以看看GregorianCalendar类,实现了add方法,里面有判断if (field == YEAR),如果传的值与YEAR的值相等,就表示对年进行加,你传1,YEAR的值也是1,这两个值是相等的 2周前 回复
Jordan裔可是为什么1可以指向YEAR呢? 2周前 回复

public void add(int field,int amount)

这个参数是的类型是int,只要传int类型的值就可以了,1是int类型,YEAR也是int类型。

 

少去思考这些鸡毛蒜皮。。。

你不如去思考下他为什么不new对象,要getInstance()。然后再看看他的getInstance是怎么做的,为什么这么做,然后思考下为什么他不开放构造函数出来。然后再去类比一下Date或者其他的时间类型的类,看看分别的设计思路。

然后前面也有朋友提到了,最新的做法是java.time包,你再去看看为什么要用java.time而不是Calendar。

那我问你,year好记还是1好记?

再想一想,万一哪天year改了,不是用1表示,而用2表示,你却直接写了1,你还能直接看出自己的错误吗?

这就是为什么要用有意义的名称代替无意义的数字。

顶部