gpt4 book ai didi

java - 从 Java 中的属性文件动态填充字符串

转载 作者:行者123 更新时间:2023-11-30 07:31:34 25 4
gpt4 key购买 nike

有谁知道加载属性文件并动态创建与键值同名的字符串的方法吗?

我试图通过将所有系统消息等从逻辑中移出并移到属性文件中来清理我的代码,但我想避免必须有一个由如下几十行组成的类:

final String COMMS_ERROR = properties.getProperty(COMMS_ERROR);

我正在努力实现的一个例子:

for (String key : properties.getPropertyValues()) {
final String <key> = properties.getProperty(key)
}

显然这行不通,编译器会出错。但我想知道是否有一个优雅的解决方案来做同样的事情——使用属性文件中的键名创建新的字符串——无论是通过单独的库还是在我自己的代码中。

我想到的一个解决方案是使用属性文件中的键/值填充 HashMap,但这意味着以下形式的代码不够优雅:

import com.x.y.messages;
...
throw new Exception(HM.get("COMMS_ERROR"));

其中 HM 是位于 com.x.y.messages 中的 HashMap...

理想情况下,我只想能够做到:

import com.x.y.messages;
....
throw new Exception(COMMS_ERROR);

任何想法/建议表示赞赏。

最佳答案

如果这些属性在编译后可以更改(如果不能,那么为什么要使用它们)您将没有任何机会动态地创建和使用这些字符串。当然,有一些方法可以动态创建代码(比如 AOP 运行时织入),但是这些代码在正常的编译过程中是不可用的。

那么编译器怎么知道COMMS_ERROR实际存在于这一行 throw new Exception(COMMS_ERROR); ?它不能,因此你需要去寻找 HashMap方法。注意 Properties实际上是一个 Map<String, String> (好的,从 Java 6 开始它是一个 Hashtable<Object, Object> 但它的行为就像一个 Map<String, String> ),因此没有必要创建一个新的。

编辑:你可以做的是像这样使用静态导入:

package yourpackage;

public class Props
{
private static Properties props;

public static String prop(String prop)
{
return props.getProperty( prop );
}
}

像这样使用它:

import static yourpackage.Props.prop;

....

prop("someKey");

请注意,静态导入有其缺点,比如看起来方法是它使用的类的一部分,所以我只想提供一个替代方案,让您决定是否使用它。

关于java - 从 Java 中的属性文件动态填充字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267701/

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