enum против загрузчиков классов - PullRequest
6 голосов
/ 26 ноября 2010

Иногда вы можете даже не знать, что среда, в которую вы вставляете свой код, имеет более одного загрузчика классов.Можно ли ожидать, что в этом случае операция "==" будет работать со значениями перечисления?

Ответы [ 3 ]

12 голосов
/ 26 ноября 2010

Несколько загрузчиков классов могут не быть проблемой, если перечисление доступно только через один из них.Если это не так, вы теряете все преимущества перечисления.

И, кстати, использование equals() тоже не поможет.Вот реализация Enum.equals(Object) в Java 1.6:

public final boolean equals(Object other) { 
    return this==other;
}
9 голосов
/ 26 ноября 2010

Если ваш enum-класс загружен только один раз, он все равно будет работать.

  • ваше перечисление используется только в загруженном плагине
  • перечисление было загружено родительским загрузчиком классов отдельных загрузчиков классов плагина

Если ваш enum-класс загружен разными загрузчиками классов, он не будет работать

  • вы передаете значения перечисления между различными подключаемыми модулями, но загрузчик классов приложения не загрузил перечисление. (он все еще может работать, если значения enum никогда не пересекаются между плагинами)

Причина, по которой это так

Java использует экземпляры объектов для представления различных значений перечисления, каждый из этих экземпляров хранится в виде статического поля в классе перечисления. Если перечисление загружается дважды, каждое значение перечисления представляется двумя разными экземплярами объекта. == operator только сравнивает ссылки и не знает о нескольких экземплярах, представляющих значение перечисления, поэтому он не сможет сопоставить значения, загруженные различными загрузчиками классов.

0 голосов
/ 26 ноября 2010

"==" не будет работать, но вы все равно захотите использовать .equals().

Возможно, вас заинтересует класс apache commons lang: текст ссылки

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