Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 半决赛_Java_Caching_Static_Global Variables - Fatal编程技术网

Java 半决赛

Java 半决赛,java,caching,static,global-variables,Java,Caching,Static,Global Variables,在阅读这篇文章时,我想到了一个小问题: 在我的应用程序中,我有大量的配置变量。例如字体、颜色、缓存图像等。。。由于它们中的大多数从未改变,我认为它们是静态的。然而,我的应用程序是一个小程序,由于客户端已经执行了一次小程序,这些静态信息中的一些可能会更改,因为给定的配置可能已经更改。因此,我们可以说这种数据很少被用来改变,但并不被认为是最终的 此外,由于我以这种方式处理的信息量巨大,我将它们映射到自己的枚举上,如下所示: public enum Fonts { COLOR_CHOOSE

在阅读这篇文章时,我想到了一个小问题:

在我的应用程序中,我有大量的配置变量。例如字体、颜色、缓存图像等。。。由于它们中的大多数从未改变,我认为它们是静态的。然而,我的应用程序是一个小程序,由于客户端已经执行了一次小程序,这些静态信息中的一些可能会更改,因为给定的配置可能已经更改。因此,我们可以说这种数据很少被用来改变,但并不被认为是最终的

此外,由于我以这种方式处理的信息量巨大,我将它们映射到自己的枚举上,如下所示:

public enum Fonts {

    COLOR_CHOOSER, MAP_META_DATA; 
    private Font localFont;

    public Font getValue() {
        return localFont;
    }

    private void setValue(Font newFont) {
        localFont = newFont;
    }
}

protected static void initFonts() {
    Fonts.COLOR_CHOOSER.setValue(new Font("Arial", Font.PLAIN, 15));
    Fonts.MAP_META_DATA.setValue(font_race.deriveFont(Font.BOLD, 11));
}
通过使用这样的枚举,我可以很容易地识别我要查找的值,同时我可以在一个地方维护所有的值

有人可能会说,因为这是静态的,我也可以将它们放在对象中,它们在任何情况下都会被使用。然而,我认为当前的行为更容易阅读

除此之外,initFonts方法将在将来被映射方法取代,该方法从外部源(如json或xml)获取当前硬编码的值。因此,如果我使用OO,这意味着将任何传入的数据转发给对应的对象,我认为这些对象不容易阅读。 提出我的问题: 你们中的一些人如何映射/缓存最终参数我也考虑过使用一个带有枚举的hashmap作为键值。例如,图像、字体、颜色、像素边距等是我使用这些枚举合适的方式,或者我认为它们是邪恶的,因为它们是静态的吗?如果是-什么是一个合适的方式,保持易于阅读和维护

我认为我的解决方案是一种可行的方式,但在阅读了上述线程之后,我们将重新思考整个设计

非常感谢你的建议。
问候。

枚举可以表示静态最终数据,这就是为什么我认为使用这样的initFonts方法来修改枚举值的内容是不合适的,即使它使用的是私有方法。你应该拥有的更像:

public enum Fonts {
    COLOR_CHOOSER(new Font("Arial", Font.PLAIN, 15)),
    MAP_META_DATA(new Font("Arial", Font.BOLD, 11)); // No reference to font_race, of course

    private final Font localFont;

    private Fonts(Font font) {
        localFont = font;
    }

    public Font getValue() {
        return localFont;
    }
}
我不明白你为什么说你的配置数据不是最终的:当应用程序运行时,它似乎没有改变


但是,如果运行时初始化需要加载可能更改的值,而不是在编译时确定,则枚举可能不再是正确的模型,如果它无法以简单的方式初始化其值本身,那么从枚举的静态初始值设定项调用太多的内容可能不是最好的选择。在这种情况下,我会用一个中间服务来代替直接使用枚举,例如持有一个不可变的映射,它可能是一个用Collections.unmodifiableMap包装的枚举映射,使用适当的方法一次性初始化,而不是调用font.COLOR\u CHOOSER.getValue,你可以打电话给FontService.getFontFonts.COLOR\u CHOOSER.

任何人都没有评论?!