接口中的嵌套枚举

时间:2016-03-05 15:52:24

标签: java class enums

我正在学习Java,我在实施方面遇到了一些问题。我的任务是:我已经获得了自动生成的Java文档,我应该根据它创建代码。根据文档,接口Inter1应该包含嵌套类Inter1.Directions。但是,有关Inter1.Directions的更详细信息表明它实际上是一个枚举。我遇到了多个语法问题,我将尝试解释它们:

这是我的界面代码目前的样子:

package newpack
public interface Inter1 {

    public static enum Direction {  

        E(0), N(1), W(2), S(3);
        Inter1.Direction[] values();
        Inter1.Direction valueOf(java.lang.String name);
        //are these methods only supposed to be declared, 
        //since this is technicaly not an interface?
    }
    //some method declarations....
}

这就是我的枚举实现:

package newpack
public static enum Inter1.Direction {

    //not sure if enumeration should be here if it's already in interface
    public static Inter1.Direction[] values() {
        //code...
    }

    public static Inter1.Direction valueOf(java.lang.String name) {
        //code...
    }
}

包含枚举的文件我认为应该命名为Inter1.Direction.java,但是如果我将枚举命名为Inter1.Direction,我会得到{预期错误。如果我删除Inter1。只留下方向我得到标识符预期错误。我该如何修改我的代码以便我不会出错?

P.S。:我知道可能有更好的方法来实现这一点,但我必须像这样(或类似地)这样做。

编辑:

我已将enum实现移动到界面内部,我的代码如下所示:

public interface Inter1 {

    public static enum Direction {  

        L, LU, U, RU, R, RD, D, LD;

        public static Inter1.Direction[] values() {
            //implementation
        }

        public static Inter1.Direction valueOf(java.lang.String name) {
            //implementation
        }
    }
//some method delarations
}

我现在得到了

错误:方法值()已在枚举方向

中定义

错误:方法valueOf(String)已在枚举方向

中定义

现在问题出在哪里?

1 个答案:

答案 0 :(得分:1)

您可以将与其他类紧密交织的类放在另一个类(inner classes)内的其他类的上下文中。

您的Direction可能在Inter1之外无用;它是界面的细节。

OTOH如果Direction有任何非平凡的实现细节,我会把它放到一个单独的文件中。目前它是一个静态内部类,因此它没有引用外部实例来调用其方法。 Direction的行为AFAICT不应该依赖于接口的特定实现如何工作。

我宁愿将Direction放在界面的范围内,而不是将Direction放在界面范围内。

如果你有许多类似的接口,你的设计就有意义,每个接口都有自己的 "openingDate":"2015-07-15T23:00:00"枚举,与其他接口不兼容。