Использование Enum в Java для хранения фиксированного набора изменяемых объектов - PullRequest
0 голосов
/ 10 октября 2018

Я создаю приложение для Android, которое обращается к canvas.Для этого я определил прямоугольные области экрана, которые я хочу нарисовать на холсте.Поскольку я всегда рисую фиксированный набор экранных областей, я думал об использовании Enum (так как Enum предназначен для фиксированных наборов).

Вот мой enum:

public enum LayoutEnum {
    FULLSCREEN(
            new ScreenArea(
                new Rect(
                        0,
                        0,
                        MainActivity.getDevice().getWidth(),
                        MainActivity.getDevice().getHeight()),
                Attributes.BG_PAINT)),
    LOGO_AREA(
            new ScreenArea (
                    new Rect(
                            (int) (0.3 * FULLSCREEN.getScreenArea().getArea().width()),
                            (int) (0.3 * FULLSCREEN.getScreenArea().getArea().width()),
                            (int) (FULLSCREEN.getScreenArea().getArea().width() - 0.3 * FULLSCREEN.getScreenArea().getArea().width()),
                            (int) (0.7 * FULLSCREEN.getScreenArea().getArea().width())),
                    Attributes.BG_PAINT)
    );

    private ScreenArea screenArea;

    LayoutEnum(ScreenArea screenArea) {
        this.screenArea = screenArea;
    }

    public ScreenArea getScreenArea() {
        return screenArea;
    }
}

ScreenArea - это простой класс, который содержит Rect и Paint и содержит метод draw (и некоторые методы получения и установки).

У меня есть вопрос: это хороший подход?

С одной стороны, я работаю с фиксированным набором переменных.С другой стороны, эти переменные являются изменчивыми, и я могу изменить их атрибуты (например, используя методы получения и установки).Например, я могу вызвать FULLSCREEN.getScreenArea().getPaint().setColor(Color.BLUE)

Когда вы смотрите на Enum, он говорит, что это

специальный тип данных, который позволяет переменной быть набором предопределенныхконстанта

Итак, у меня есть фиксированный набор, он предопределен, но не обязательно постоянен.

Мой оригинальный подход заключался в определении класса с именем Layout, который содержал HashMap из Screenarea х.В этом случае я использовал, например, Layout.get("fullscreen").draw(canvas), чтобы нарисовать область экрана на холсте.В этом новом подходе я использую, например, FULLSCREEN.getScreenArea().draw(canvas).

Одна из причин, по которой я хотел бы перейти, - это ввести безопасное решение.Конечно, можно было бы также переключиться с HashMap на EnumMap и сохранить имена моих экранных областей в Enum.

Надеюсь, вы сможете указать мне правильное направление:направление, которое не только работает (вышеупомянутое уже работает), но также приемлемо и не пахнет.

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