Java 如何使一个枚举项具有另一个枚举的项?
我每月、季度和半年各有一个枚举Java 如何使一个枚举项具有另一个枚举的项?,java,enums,Java,Enums,我每月、季度和半年各有一个枚举 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 & co
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)
。我如何实现这一点?或者这可以重构吗?我建议将方法布尔containsMonth(int-month)
添加到时间间隔
接口。通过这种方式,您可以实现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
}
查看
月/季度/半年
枚举的代码会有所帮助,因为有几种方法可以实现这一点。除非您确实需要枚举,否则我会选择一个可以处理此函数的简单类。类的优点是,您可以将枚举分配给一个私有变量,并为getIntervalByMonth(int-month)
method@AdrianJandl否,我想从enumTimeIntervalUnit
@bas的项目返回enumMonth
或Quarter
或HalfYear
的项目,“可以处理此函数的简单类”是什么意思?你是说一个helper类,它有一个函数静态getIntervalByMonth(TimeIntervalUnit,int)
?非常感谢!有趣的是,在你回答之前我就想到了。我猜你使用了思想传播技术或其他什么。