gpt4 book ai didi

java - 是否建议使用静态变量来维护状态?

转载 作者:行者123 更新时间:2023-11-30 05:08:02 25 4
gpt4 key购买 nike

我有一个依赖于外部依赖项的加密实用程序方法 --- 从属性文件中检索的密码 key 。在我继承的当前代码库中检索它的方式是,它依赖于创建新对象才能获取属性文件中属性的值。例如,如果想从属性文件中获取 Cipher Key,则如下所示:

    public synchronized static String encrypt(String someTextToEncrypt) {
String propertyValue = null;
propertyValue = getProcessCommonBase().
getProcessProperties.getProperty("CIPHER_KEY");
/*encrypt algorithm*/
return encryptedForm;
}
private synchronized static ProcessCommonBase getProcessCommonBase() {
if (processCommonBase == null) {
processCommonBase = new ProcessCommonBase();
}
return processCommonBase;
}
private static ProcessCommonBase processCommonBase;

已编辑: 从设计角度来看,使用 processCommonBase 实例变量之类的东西是一个很好的做法吗?我的理解是,一个好的做法是静态变量应该是最终的并且不改变。然而,在这种情况下,ProcessCommonBase 类维护状态并且可能会发生更改。

新问题:如果静态方法依赖于外部的东西,我不应该只将该方法和 processCommon 基本变量标记为非静态,并且在 Spring 中为其创建一个 bean 定义吗?什么是更好的?

最佳答案

我同意乔纳斯的观点。我不明白为什么不将变量设为最终变量。您能否详细说明一下这到底是什么意思:

My understanding is that a good practice is that static variables should be final and do not change. In this case, however, the ProcessCommonBase class maintains state and is subject to change.

即使变量是最终变量,您仍然可以以与使用非最终变量完全相同的方式更改它引用的对象。这就是为什么静态方法让静态变量保持其状态是完全可以的,但在这种情况下没有什么可以阻止你实际将其设为最终状态。为什么不这样做:

私有(private)静态 ProcessCommonBase processCommonBase = new ProcessCommonBase();

也许有一些东西阻止您在静态初始化时创建 processCommonBase,但从您提供的信息来看,这一点并不明显。

关于java - 是否建议使用静态变量来维护状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com