2

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

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

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

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

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

或者,将所有这些关键字放入接口中,让我的所有类都继承它会更好吗?虽然它可以工作,但感觉不对劲。

4

2 回答 2

4

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

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 开始,您可以使用静态导入来获得同样的好处,而不会出现“代码污染”。

于 2013-02-08T04:11:42.733 回答
0

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

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

- 创建一个静态类

- 读入一个保存了所有关键字的文本文件

- 编写几个检索和比较关键字的函数

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

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

于 2013-02-08T04:23:05.730 回答