我正在学习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)已在枚举方向
中定义现在问题出在哪里?
答案 0 :(得分:1)
您可以将与其他类紧密交织的类放在另一个类(inner classes)内的其他类的上下文中。
您的Direction
可能在Inter1
之外无用;它是界面的细节。
OTOH如果Direction
有任何非平凡的实现细节,我会把它放到一个单独的文件中。目前它是一个静态内部类,因此它没有引用外部实例来调用其方法。 Direction
的行为AFAICT不应该依赖于接口的特定实现如何工作。
我宁愿将Direction
放在界面的范围内,而不是将Direction
放在界面范围内。
如果你有许多类似的接口,你的设计就有意义,每个接口都有自己的 "openingDate":"2015-07-15T23:00:00"
枚举,与其他接口不兼容。