Понимание вложенного перечисления Java - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу спросить о вложенных перечислениях. Я работаю со старым кодом, и я нашел очень странную конструкцию, которую я не очень хорошо понимаю.

У меня есть это перечисление:

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 голосов
/ 03 сентября 2018

Enum в Java является базовым классом для всех типов перечисления. Можно думать, что это похоже на класс Object.

Так же, как можно хранить ссылку на объект любого класса, используя ссылку на тип Object, можно ссылаться на тип перечисления, используя ссылку на тип Enum.

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

Нельзя вызывать метод, присутствующий в унаследованном классе, но отсутствующий в суперклассе, используя ссылку на суперкласс.

Аналогичное объяснение по поводу здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...