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

标签 java design-patterns

我正在编写一个相当复杂的翻译模块,它本质上是在逻辑表示形式和 Java 代码之间进行翻译。它跨越多个类,这些类都是相互解耦的。

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

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

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

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

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

最佳答案

这并不是最糟糕的事情,但它有点过时了。如果您使用 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;
}

你说得对,“将它们塞进界面”的方法感觉不对;接口(interface)是关于指定行为的,而具有静态finals的无方法接口(interface)不提供这种行为。从 Java 1.5 开始,您可以使用 static imports在没有“代码污染”的情况下获得相同的好处。

关于java - 这是全局变量的可接受的使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765387/

相关文章:

java - 复制文件与复制文件信息

java - C++11、C#和Java内存模型的区别

c++ - C++中嵌套函数的设计模式

java - 典型的微服务架构中,如何链接微服务各自独立的RDBMS数据库中的相关数据?

oop - 策略与桥梁模式

java - Hadoop:处理大型序列化对象

java - 更改java中对象数组中的字段

java - 执行在 getOutputStream() 函数处自动停止 使用 servlet 推送通知

asp.net 设计的哪些前端可以轻松更换或更改?

java - 在预览模式下使用的设计模式?