Java嵌套枚举理解

Java嵌套枚举理解,java,enums,nested,Java,Enums,Nested,我想询问有关嵌套枚举的问题。我正在使用旧代码,我发现了非常奇怪的结构,我不是很理解 我有这个枚举: 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

我想询问有关嵌套枚举的问题。我正在使用旧代码,我发现了非常奇怪的结构,我不是很理解

我有这个枚举:

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一起工作,没有任何问题。也许有人能解释一下

Java中的是所有枚举类型的基类。可以将其视为类似于对象类

就像可以使用object类型的引用来保存任何类的object引用一样,可以使用Enum类型的引用来引用枚举类型

Object o = new Integer(10);
Enum e = DBEngine.ORACLE;
不能使用超类的引用调用继承类中存在但超类中不存在的方法


类似的解释已经结束。

这与您的更改无关。如果您试图使用超类引用调用类型的非重写公共方法,您将得到一个错误。@realponsign是的,这是真的,但您可以向Eum
Enum
是一个抽象类解释此强制转换所发生的情况
DbEngines
Enum
的一个子类。由于新方法是在类型
DbEngines
上定义的,因此它们仅使用此类型可见,而不是
DbEngines
的超类
Enum
。注意-
Enum
是泛型。请不要使用原始类型,这是一种不好的做法。@realpoint和dhruvilvaghela感谢您的支持explanations@RealSkeptic我的错。这是我能想出的最快的例子。
Object o = new Integer(10);
Enum e = DBEngine.ORACLE;