Java嵌套枚举理解

时间:2018-09-03 12:49:46

标签: 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 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;
}
}

我在此枚举中添加了专用于引擎的私有String,因此在这里对我来说是个好地方。问题是,在方法声明的某些地方,我看到了类似的

public someMethod(Enum<DbEngines> engine, ...)

它在没有方法的情况下也可以完美运行,但是现在,在更改之后,我无法称呼这个枚举为公众。但是,如果我更改为:

public someMethod(DbEngines engine, ...)

它对所有公共获取者都没有任何问题。也许有人可以解释一下?

1 个答案:

答案 0 :(得分:1)

Java中的

Enum是所有枚举类型的基类。可以认为它类似于Object类。

就像可以使用Object类型的引用来保存任何类的对象的引用一样,也可以使用Enum类型的引用来引用枚举类型。

Object o = new Integer(10);
Enum e = DBEngine.ORACLE;

使用超类的引用不能调用继承的类中存在但超类中不存在的方法。

here的类似解释。