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