我最近看了一个关于枚举的教程。首先,语法超越了我的脑海。过去,我似乎也不了解这个主题及其具体用途。该教程含糊不清,评论员似乎只是编写代码和谈话,而不是刻意解释她正在使用的代码。请不要只是投票我的问题,因为你个人认为这是一个简单的话题。我已经看过教程并发现它们令人困惑。如果您觉得无法回答我的问题,也可以欣赏指向网站或管视频的链接。快乐的编码!
答案 0 :(得分:0)
枚举适用于具有固定值集的概念。枚举的一个很好的例子是一年中的几个月。在阳历中,有十二个月,你可以创造一个月枚举:
enum Month {
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
}
您可以为个别成员注入特定行为,例如,我们可以提供numberOfDays
属性:
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;
}
}
但是,你会发现2月份每年都没有28天。相反,你需要给它更特殊的行为。那么,您为FEBRUARY
创建了一个类主体:
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;
}
}