Включить расширяемый класс - PullRequest
0 голосов
/ 06 апреля 2020

В Java вы можете включить перечисление. Скажем, у вас есть что-то вроде

enum Color { RED, ORANGE, YELLOW ... }

, тогда вы можете

switch (color) {
case RED:
    ...

Теперь у меня есть особое требование для включения класса объектов, для иллюстрации назовите их цветами, , но также создайте их больше во время выполнения . И вы не можете сделать это с помощью перечислений.

Конечно, оператор switch может знать только о тех, которые определены во время компиляции. Это нормально. Если во время выполнения я создаю чирок, бордовый и аквамарин, мне все равно нужно только включить базовые цвета c, такие как красный, зеленый и синий. Но мне нужно иметь возможность создавать другие.

Подклассы работали бы хорошо, если бы я мог создать class OtherColor extends Color ..., но перечисления не могут быть подклассами или подклассами.

Я мог бы забыть о перечислениях и просто создайте обычный класс с несколькими экземплярами stati c ... но переключение на них работать не будет.

Самое близкое решение, которое я знаю, это class Color вместе с switch (color.toString()). Это неоптимально, потому что это означает, что опечатки не перехватываются во время компиляции, и дополнительные циклы часов должны быть потрачены на сравнение строк во время выполнения. (Вторым лучшим решением было бы назначить теги целочисленных идентификаторов, которые наносят ущерб поддерживаемости кода.)

Есть ли другое решение?

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