在 java 中使用枚举来存储一组固定的可变对象

Using Enum in java to store a fixed set of mutable objects

提问人:MWB 提问时间:10/10/2018 最后编辑:MWB 更新时间:10/25/2018 访问量:110

问:

我正在创建一个 Android 应用程序,该应用程序会吸引 .为此,我定义了要绘制到画布上的矩形屏幕区域。由于我总是绘制一组固定的屏幕区域,因此我正在考虑使用(为固定集设计)。canvasEnumEnum

这是我的: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是一个简单的类,它包含 a 和 a,并包含一个方法(以及一些 getter 和 setter)。RectPaintdraw

我的问题是:这是一个好方法吗?

一方面,我正在处理一组固定的变量。另一方面,这些变量是可变的,我可以更改它们的属性(例如,使用 getter 和 setter)。例如,我可以调用FULLSCREEN.getScreenArea().getPaint().setColor(Color.BLUE)

当你看它说它是Enum

一种特殊的数据类型,它使变量能够成为一组 预定义常量

所以我确实有一个固定的集合,它是预定义的,但不一定是恒定的。

我最初的方法是定义一个名为 包含 of 的类。在这种情况下,我使用例如将屏幕区域绘制到画布上。在这种新方法中,我使用例如.LayoutHashMapScreenareaLayout.get("fullscreen").draw(canvas)FULLSCREEN.getScreenArea().draw(canvas)

我想切换的原因之一是引入类型安全解决方案。当然,也可以从 a 切换到 an 并将我的 screenareas 的名称存储在 .HashMapEnumMapEnum

希望你能为我指出正确的方向:一个不仅有效(上述已经有效)而且可以接受且没有异味的方向。

爪哇岛 人造人 枚举 可变

评论

1赞 Mena 10/10/2018
可能会迁移到代码审查,但如果有人不同意,则保持开放状态。
0赞 Michael 10/10/2018
这不是一个好的解决方案。这是全局状态,这总是不好的。看起来您正在尝试使用枚举常量重新发明依赖注入。只需使用 Guice 或 Spring。
0赞 MWB 10/12/2018
解决了 .像魅力和类型安全一样工作!EnumMap

答: 暂无答案