Java 最终静态属性更改。。有什么想法或方法吗?

Java 最终静态属性更改。。有什么想法或方法吗?,java,static,final,Java,Static,Final,我必须维护一个代码,以便为类中的最终静态变量增加更多的灵活性 变量不再是全局常量,可以更改 问题是该类位于公共库中,并用于不同的项目 您有没有一种方法或设计模式比将类代码从公共库复制粘贴到我的特定应用程序并对其进行重构更好 例如: 公共项目 Class CommonClass { public final static var globalSomething = somethingGlobal; public static method(){ //CommonClass.gl

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

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

问题是该类位于公共库中,并用于不同的项目

您有没有一种方法或设计模式比将类代码从公共库复制粘贴到我的特定应用程序并对其进行重构更好

例如:

公共项目

Class CommonClass {

    public final static var globalSomething = somethingGlobal;

    public static method(){ //CommonClass.globalSomething is used here}
}
在我的应用程序(以及引用commons的其他应用程序)中,我们可以使用static属性,也可以调用该方法:

--->
var b=CommonClass.somethingGlobal

--->
var c=CommonClass.method()//我们知道这里使用CommonClass.globalSomething

期望:

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

如果我没弄错,您希望将其作为一个参数来实现

看看你的例子:

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。我在回答中部分更正了它。

您使用的是什么IDE?在Eclipse和Intellij中有一些很棒的重构。你的问题有点模糊。你可以添加一些代码,或者尝试重新排序你的qeustion吗?我也不明白你的问题。删除
final
修饰符、构建库的新版本并在其他项目中使用它有什么不对?如果删除final,它仍然是静态的(对多线程不安全)请注意,Java编译器可以将一些
static final
字段视为编译时常量-如果您有
public static final双阈值=0.5
(例如),并且您修改了值或删除了
final
修饰符,然后,您可能需要重新编译引用此字段的任何其他类,因为它们在编译时将具有先前的值“baked in”。