我们的想法是创建一个包含枚举的接口,该枚举将保存县代码,以便稍后可以将其用作对象中变量的值。
它应该是这样的:
public interface CountrCodes {
public enum Countries { france(FR), germany(D), spain(ES), portugal(PT)};
}
但IDE(Eclipse)正在和我争论:
> Syntax error, insert ")" to complete Expression
> - 'enum' should not be used as an identifier, since it is a reserved keyword from source level 1.5 on
> - enum cannot be resolved to a type
> - PT cannot be resolved to a variable
> - ES cannot be resolved to a variable
> - Syntax error on token ")", delete this token
> - Syntax error, insert ";" to complete BlockStatements
> - D cannot be resolved to a variable
> - Syntax error, insert ";" to complete FieldDeclaration
> - F cannot be resolved to a variable
这是我第一次使用枚举,我感到困惑,因为我认为在界面中使用枚举是绝对合法和正确的。我怎样才能使它发挥作用?
答案 0 :(得分:1)
外部接口不需要完成您尝试完成的任务。在其自己的文件(Countries.java)中定义枚举:
public enum Countries {
FRANCE("FR"), GERMANY("D")
private Countries(code) {
this.countryCode = code;
}
private String countryCode
}
应该得到你所需要的,尽管正如其他人所说,这不是一个非常有用的枚举。
答案 1 :(得分:1)
如果你真的不想在自己的文件中定义枚举(参见rmlan answer)。
这就是你要找的东西:
public interface CountrCodes {
public enum Countries { FRANCE, GERMANY, SPAIN, PORTUGAL};
}
答案 2 :(得分:1)
你想做什么,被称为内部枚举。一个在课堂里面的枚举,没什么特别的,也没什么复杂的。完全合法。公共作为内部阶级。但在这种情况下,它是一个枚举。
枚举是另一种对象,如类,但它们还有其他一些属性。例如,枚举是线程安全的,它们是可序列化的。
您的特定示例没有问题。它不编译,因为编译器无法解析FR,D,ES和PT。如果我删除这些国家/地区代码,则使用Java 8进行编译。
有关更多参考资料,请查看此处:
https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
答案 3 :(得分:1)
我无法确定接口声明何时可能具有嵌套成员,但至少可以使用嵌套成员,因为至少Java 7。
如果定义一个接口,其中一组常量可用于主要使用该接口,则可以方便地将常量嵌套为接口中的枚举类。这是一个完全可以接受的接口用例。考虑一下你自己的代码:
public interface CountryCodes {
public enum Countries { france(FR), germany(D), spain(ES), portugal(PT)};
}
很明显,您希望将枚举类Countries
嵌套在接口CountryCodes
中(因为单个枚举常量是单一的,我建议不要使用复数作为枚举类名,例如。Country.SPAIN
而不是Countries.SPAIN
;枚举常量应按照惯例在所有大写中命名。)
然而,您的声明中的不同之处在于您显然希望将数据与常量相关联。因此,您的枚举类需要一个实例字段和一个构造函数:
public interface CountryCodes {
public static enum Country {
FRANCE("FR"),
GERMANY("DE"),
SPAIN("ES"),
PORTUGAL("PT");
private final String e_countryId;
private Country(String c) {
this.e_countryId = c;
}
}
:
:
}
枚举类声明中的标识static
是不必要的。我喜欢将它包含在内,以明确枚举是一个嵌套成员。