首页 > 解决方案 > 使用静态字段扩展类以“覆盖”静态属性

问题描述

这引起了激烈的辩论,我想知道这种方法是否存在任何问题。

我有一个只包含静态字符串的类:

public class EventConstants {
    public static ID = "1";
    public static DOMAIN = "local";
    public static final DEVICE = "PC";
    public static final SOURCE = "local";
}

现在 ID 和 DOMAIN 不是的原因final是因为我选择在给定 Spring 的情况下覆盖它们ConfigurationProperties。所以...

public CustomEventConstanstants extends EventConstants {

    @Autowired
    private PropertyMapper mapper;

    @PostConstruct
    public void init() {
        ID = (mapper.ID != null) ? mapper.ID : EventConstants.ID
        DOMAIN = (mapper.DOMAIN != null) ? mapper.DOMAIN : EventConstants.DOMAIN
    }
}

这个类背后的想法是用户可以简单地调用一个类并使用由 Spring 属性配置的适当常量。例子:

object.methodA(CustomEventConstants.ID)  // This will return the configured ID or what's in EventConstants
object.methodB(CustomEventConstants.DEVICE)

我的论点是其他人认为它不适合测试,因为它不能被适当地模拟出来。

标签: javaspringsoftware-design

解决方案


推荐阅读