В Java вы можете включить перечисление. Скажем, у вас есть что-то вроде
enum Color { RED, ORANGE, YELLOW ... }
, тогда вы можете
switch (color) {
case RED:
...
Теперь у меня есть особое требование для включения класса объектов, для иллюстрации назовите их цветами, , но также создайте их больше во время выполнения . И вы не можете сделать это с помощью перечислений.
Конечно, оператор switch может знать только о тех, которые определены во время компиляции. Это нормально. Если во время выполнения я создаю чирок, бордовый и аквамарин, мне все равно нужно только включить базовые цвета c, такие как красный, зеленый и синий. Но мне нужно иметь возможность создавать другие.
Подклассы работали бы хорошо, если бы я мог создать class OtherColor extends Color ...
, но перечисления не могут быть подклассами или подклассами.
Я мог бы забыть о перечислениях и просто создайте обычный класс с несколькими экземплярами stati c ... но переключение на них работать не будет.
Самое близкое решение, которое я знаю, это class Color
вместе с switch (color.toString())
. Это неоптимально, потому что это означает, что опечатки не перехватываются во время компиляции, и дополнительные циклы часов должны быть потрачены на сравнение строк во время выполнения. (Вторым лучшим решением было бы назначить теги целочисленных идентификаторов, которые наносят ущерб поддерживаемости кода.)
Есть ли другое решение?