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否,我想从enum
TimeIntervalUnit
@bas的项目返回enum
Month
Quarter
HalfYear
的项目,“可以处理此函数的简单类”是什么意思?你是说一个helper类,它有一个函数
静态getIntervalByMonth(TimeIntervalUnit,int)
?非常感谢!有趣的是,在你回答之前我就想到了。我猜你使用了思想传播技术或其他什么。