给一个人一条鱼,你就喂他一天。教一个人钓鱼,你养他一辈子。
(当然也适用于女性。)
我正在教你钓鱼。我正在解释如何在不必先询问 Stack Overflow 的情况下捕获这样的错误。
设置您的 IDE 以在您使用对象(实例)调用静态方法时向您发出警告。那就是每当你做类似的事情时
yourObject.someStaticMethod();
在我的 Eclipse 中,您的代码给出了以下警告:
Period 类型的静态方法 ofDays(int) 应该以静态方式访问
这告诉我们这ofDays()
是一个静态方法,因此调用的结果与调用相同Period.ofDays(3)
。Eclipse 甚至为我解决了这个问题:
在我单击“使用 Period(声明类型)更改对静态的访问”后,该代码行变为:
Period.ofYears(1).ofMonths(2);
Period period = Period.ofDays(3);
现在我想你可以明白为什么你得到了你得到的结果。
所以:
- 确保您的 IDE 配置为发出此类警告。它不一定是 Eclipse,其他 IDE 也可以这样做。
- 当您收到这些警告时,请阅读它们并确保您理解它们。如果您跳过了一次警告,如果您得到意外的结果,请返回并再次阅读警告。如果您仍然需要在 Stack Overflow 上提问,当然欢迎您,并考虑包括您不理解的警告文本。
其他人很好地解释了如何修复您的代码以提供您想要的结果。IfPeriod.of(1, 2, 3)
有点令人困惑,因为您无法分辨年,月,周和日,使用Period.ofYears(1).plusMonths(2).plusDays(3)
,一切都很清楚。它也类似于您在问题中尝试的内容。
链接: 如何使用与我在这里给出的许多技巧相似的技巧来调试小程序(并不是因为你的问题很糟糕,这是一个很好的问题,我赞成)。