在Java中使用Enum存储一组固定的可变对象

时间:2018-10-10 15:40:11

标签: java android enums mutable

我正在创建一个吸引canvas的Android应用。为此,我定义了要绘制到画布上的矩形屏幕区域。由于我一直在绘制固定的屏幕区域,因此我在考虑使用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方法(以及一些getter和setter)。

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

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

当您查看Enum时,它说是

  

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

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

我最初的方法是定义一个名为Layout的类,其中包含HashMap的{​​{1}}。在这种情况下,我使用的是Screenarea来将屏幕区域绘制到画布上。在这种新方法中,我使用的是Layout.get("fullscreen").draw(canvas)

我要切换的原因之一是引入类型安全的解决方案。当然,也可以从FULLSCREEN.getScreenArea().draw(canvas)切换到HashMap并将我的屏幕区域的名称存储在EnumMap中。

希望您能为我指明正确的方向:不仅可以起作用(上面的方法已经起作用)而且可以接受并且没有气味的方向。

0 个答案:

没有答案