gpt4 book ai didi

Java:在不消耗内存的情况下始终需要一长串变量的最佳方法?

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:37 25 4
gpt4 key购买 nike

我编写了一个抽象类来包含应用程序的所有规则,因为我的应用程序几乎无处不在。所以它包含的大部分是 static final 变量,像这样:

public abstract class appRules
{
public static final boolean IS_DEV = true;
public static final String CLOCK_SHORT_TIME_FORMAT = "something";
public static final String CLOCK_SHORT_DATE_FORMAT = "something else";
public static final String CLOCK_FULL_FORMAT = "other thing";
public static final int USERNAME_MIN = 5;
public static final int USERNAME_MAX = 16;
// etc.
}

这个类很大,包含很多这样的变量。

我的问题:

  • 不设置静态变量意味着这些变量一直在内存中 float
  • 你建议代替有一个抽象类,我有一个具有非静态的可实例化类变量(只是 public final),所以我实例化类并使用变量在我需要的时候。
  • 或者我正在做的是完全错误的方法,您有其他建议吗?

最佳答案

鉴于现代机器、RAM 容量等,您必须有数千条规则(如果不是数百万条的话)才能在性能和内存方面产生任何显着差异。

所以问题不在于这是否会占用您的系统:它不会。

问题是这是否是一种好的做法。

当然,我自己也使用过这种模式,所以我明白它的用处。然而,主要缺点是:它使您的代码无法测试。由于没有简单的方法来为单元测试设置不同的这些值(与将不同文件放在类路径中的属性文件相反),因此很难在不连接整个应用程序的情况下测试单个模块的功能,但这取决于您在这些常量中保留的内容。

我想也许我会尝试把事情分开,每个模块、包等都有一个常量类,然后从属性文件中初始化这些常量:

private static final String CONSTANT_FOO;
private static final String CONSTANT_BAR;
static{
try{
Properties props = new Properties();
InputStream is =
MyConstantClass.class
.getResourceAsStream("my.module.properties");
props.load(is);

// you'll actually want to move this to finally, but I'm lazy
is.close();

CONSTANT_FOO = props.get("constants.foo");
CONSTANT_BAR = props.get("constants.bar");

}catch(Exception e){
throw new IllegalStateException(e);
}
}

这样你的代码就变得更可测试和可配置,同时仍然享受全局配置常量的好处。

关于Java:在不消耗内存的情况下始终需要一长串变量的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895234/

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