这是全局变量的可接受使用吗?

时间:2013-02-08 03:50:43

标签: java design-patterns

我正在编写一个相当复杂的翻译模块,它本质上是在一种逻辑表示形式和Java代码之间进行转换。它跨越了几个类,它们都是相互分离的。

我的问题是我需要跟踪一组相当广泛的关键字,这些关键字需要插入到变量名中。这些关键字必须可供模块中的所有类访问,并且易于更改。

据我所知,就设计而言,使用全局变量是一个红旗,但在这种情况下,创建一个除了提供对所述关键字的静态访问之外什么都不做的类是否可以接受?例如:

public final class KeyWords {
    public static final String SELF = "self";
    public static final String RESULT = "callResult";
    // etc
}

我自己的想法是,它有点像一个简单的配置类。我发现这比使用调解器或在方法调用之间传递一些其他桶类更合理,因为数据定义得很好,而且重要的是,在运行时不需要修改。

或者,将所有这些关键字放入界面会不会更好,让我的所有类继承这个?虽然它可行,但感觉不对。

2 个答案:

答案 0 :(得分:4)

这不是最糟糕的事情,但它有些过时了。如果您使用的是Java 1.5或更高版本,那么enum会更好;例如,它为您提供了类型安全性。

public enum KeyWord {
    SELF("self"),
    RESULT("callResult")
    ;

    public String getKeyword() {
        return keyword;
    }

    private KeyWord(String keyword) {
        this.keyword = keyword;
    }

    private final String keyword;
}

你说“把它们塞进界面”的方法是不对的;接口是关于指定行为,这是一个没有静态终结的无方法接口。从Java 1.5开始,您可以使用static imports获得相同的好处,而不会产生“代码污染”。

答案 1 :(得分:0)

如果您打算使用相同的关键字集,跨多个不相互继承的类,那么我建议只创建一个静态类,读入包含所有这些关键字的文本文件。

如果你使用这种方法,那么你可以使用专业人士总是无处不在的“一旦使用的代码”的意识形态。

创建一个静态类

- 在包含所有关键字的文字文件中阅读

- 编写一些检索和比较关键字的函数

- 在您想要的每个课程中使用它而不用担心碎片。

使用此方法还可以更新快照,因为您可以简单地打开文本文件更改添加或删除您想要的内容然后在每个实现它的类中修复它。