Enums and how they work
本问题已经有最佳答案,请猛点这里访问。
我最近看了一个关于枚举的教程。首先也是最重要的一点,语法在我的头脑中占据了很大的位置。过去,我似乎也不理解这个主题及其具体用途。教程很含糊,评论员似乎只是在写代码和说话,而没有必要解释她正在使用的代码。请不要因为你个人认为这是一个简单的话题而直接投我的票。我已经看了教程,发现它们令人困惑。如果你觉得你不能回答我的问题,一个链接到一个网站或一个你管视频也会被赞赏。快乐编码!
枚举用于具有固定值集的概念。枚举的一个好例子是一年中的月份。在公历中,有12个月,您可以创建月份枚举:
1 2 3 4 | enum Month { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER } |
您可以向个别成员灌输特定的行为,例如,我们可以提供
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | enum Month { JANUARY(31), FEBRUARY(28), MARCH(31), APRIL(30), MAY(31), JUNE(30), JULY(31), AUGUST(31), SEPTEMBER(30), OCTOBER(31), NOVEMBER(30), DECEMBER(31); private final int numberOfDays; Month(int numberOfDays) { this.numberOfDays = numberOfDays; } public int getNumberOfDays() { return numberOfDays; } } |
但是,你会注意到二月并不是每年28天。相反,你需要给它更多的特殊行为。那么,您可以为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | enum Month { JANUARY(31), FEBRUARY(28) { @Override public int getNumberOfDays(int year) { return isLeapYear(year) ? 29 : 28; } private boolean isLeapYear(int year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); } }, MARCH(31), APRIL(30), MAY(31), JUNE(30), JULY(31), AUGUST(31), SEPTEMBER(30), OCTOBER(31), NOVEMBER(30), DECEMBER(31); private final int numberOfDays; Month(int numberOfDays) { this.numberOfDays = numberOfDays; } public int getNumberOfDays(int year) { return numberOfDays; } } |