【发布时间】:2018-09-03 12:49:46
【问题描述】:
我想问一下嵌套枚举。我正在使用旧代码,我发现我不太了解的非常奇怪的结构。
我有这个枚举:
public enum DbEngines {
ORACLE("oracle", "set define on", "set define off")
, POSTGRESQL("postgresql", "--TODO set define on", "--TODO set define off");
private final String dbEngine;
private String setOn;
private String setOff;
DbEngines(String dbEngine, String setOn, String setOff) {
this.dbEngine = dbEngine;
this.setOn = setOn;
this.setOff = setOff;
}
public String getSetOn() {
return setOn;
}
public String getSetOff() {
return setOff;
}
public String toString() {
return this.dbEngine;
}
}
我在这个枚举中添加了私有字符串,它是特定于引擎的,所以这里对我来说是个好地方。问题是,在方法声明的某些地方我看到类似的东西
public someMethod(Enum<DbEngines> engine, ...)
并且它在没有方法的情况下完美地工作,但是现在,在改变之后,我不能调用这个枚举的公共 getter。但如果我改为:
public someMethod(DbEngines engine, ...)
它对所有公共吸气剂都没有任何问题。也许有人可以解释一下?
【问题讨论】:
-
这真的与你的改变无关。如果您尝试使用超类引用调用类型的非覆盖公共方法,则会收到错误消息。
-
@RealSkeptic 是的,这是真的,但也许你可以解释一下这个转换为 Eum 会发生什么
-
Enum是一个抽象类。DbEngines是Enum的子类。由于新方法是在DbEngines类型上定义的,因此它们仅在使用此类型时可见,而不是DbEngines的超类Enum。