我每月,每季度和半年都有一个枚举
public enum Month implements TimeInterval {
// JAN,FEB,MAR... (all with params & constructors)
// implementation not important
}
public enum Quarter implements TimeInterval {
// Q1, Q2 ... (all with params & constructors)
// implementation not important
}
public enum HalfYear implements TimeInterval {
// HY1, HY2 (all with params & constructors)
// implementation not important
}
以及一个函数getIntervalByMonth(int)
的枚举,我不知道如何实现。
public enum TimeIntervalUnit {
MONTH(/* params */),
QUARTER(/* params */),
HALF_YEAR(/* params */);
public TimeInterval getIntervalByMonth(int month) {
// !!! should return the correct TimeInterval,
// for example TimeIntervalUnit.QUARTER.getIntervalByMonth(1)
// should return Quarter.Q1
}
// some other methods
}
我经常循环TimeIntervalUnit.values()
,在该循环中我想使用函数getIntervalByMonth(int)
。我该如何实现呢?或者这可以重构吗?
答案 0 :(得分:2)
我建议将方法boolean containsMonth(int month)
添加到TimeInterval
界面。这样您就可以实现TimeIntervalUnit
,如下所示:
public enum TimeIntervalUnit {
MONTH(Month.values()),
QUARTER(Quarter.values()),
HALF_YEAR(HalfYear.values());
public TimeInterval getIntervalByMonth(int month) {
for (TimeInterval value : values) {
if (value.containsMonth(month)) {
return value;
}
}
return null;
}
private final TimeInterval[] values;
private TimeIntervalUnit(TimeInterval[] values) {
this.values = values;
}
// some other methods
}