最终的静态属性改变..任何想法或方法?

时间:2013-12-20 10:06:34

标签: java static final

我必须维护一个代码,为类中的最终静态变量增加更多的灵活性。

变量不再是全局常量,可以更改。

问题是该类位于一个公共库中,并在不同的项目中使用。

您是否有比将公共类中的类代码复制并粘贴到我的特定应用程序并重构它更好的方法或设计模式?

示例:

Commons project

Class CommonClass {

    public final static var globalSomething = somethingGlobal;

    public static method(){ //CommonClass.globalSomething is used here}
}

在我的应用程序(和其他引用公共的应用程序)中,我们可以使用静态属性并调用方法:

---> var b = CommonClass.somethingGlobal;

---> var c = CommonClass.method() //we know that CommonClass.globalSomething is used here

期望:

  • 能够在我的应用中更改CommonClass.somethingGlobal,并在调用CommonClass.method()
  • 中进行这些更改
  • 我可以在公共类中修改(添加方法),但我必须保持相同的初始行为(不要破坏其他项目引用公共项目)

1 个答案:

答案 0 :(得分:1)

如果我说得对,你想把它作为参数实现。

看看你的例子:

var c = CommonClass.method() //we know that CommonClass.globalSomething is used here

它已经出了问题。在调用方法之前,您不必知道必须正确设置CommonClass.somethingGlobal。这样客户端必须知道实现,违反了信息隐藏的原则。如果值是必需的,请将其作为参数:

引入
Class CommonClass {

    public static void method(var globalSomething){}
}

另一种方法是将变量和方法都设置为非静态并使用构造函数:

Class CommonClass {

    public var globalSomething = somethingGlobal;

    public CommonClass(var globalSomething) {
        this.globalSomething = globalSomething;
    }

    public void method(){}
}

PS:您的示例代码不是java。我在答案中对其进行了部分纠正。