是否可以在java属性文件中将一个变量指向另一个变量?

是否可以在java属性文件中将一个变量指向另一个变量?,java,properties,Java,Properties,我的属性文件中有很多行/条目。行按类别分组,以使文件更易于维护。我有两个相同值的键。我不想删除一个,因为它使我的文件更难维护 #category1 var1=foo .... #category2 var2=foo 有没有办法让var1指向var2?我是这样想的: #category1 var1=->var2 #point to var2 .... #category2 var2=foo 实现该接口,以便您可以使用它执行该接口提供的所有操作。要允

我的属性文件中有很多行/条目。行按类别分组,以使文件更易于维护。我有两个相同值的键。我不想删除一个,因为它使我的文件更难维护

#category1
var1=foo
....
#category2
var2=foo
有没有办法让var1指向var2?我是这样想的:

    #category1
    var1=->var2 #point to var2
    ....
    #category2
    var2=foo
实现该接口,以便您可以使用它执行该接口提供的所有操作。要允许value表示对另一个键的引用,您可以将获取该值的代码包装为这样的方式,即检查该值是否实际为键,然后返回由该键映射的值

因此,您可以实现如下内容:

String value1 = p.getProperty("var1");
while(p.containsKey(value1)) {
    value1 = p.getProperty(value1);
}
更好的方法是:在值中添加前缀-
$
,以标识引用,仅当存在时,然后解析:

String value1 = p.getProperty("var1");
while(value1.startsWith("$")) {
    value1 = p.getProperty(value1.substring(1));
}
包装检索代码的一个好方法是扩展
Properties
类并重写方法
getProperty


对于
org.springframework.context.support.ReloadableResourceBundleMessageSource
,您可以对其进行扩展,覆盖所需的任何方法,并配置spring来注入您的类版本。

不,这是不可能的。但您可以在自己的代码中支持值作为键。可能重复:您尝试过var2={var1}?@superEb支持值在我的代码中作为键是很困难的,因为我使用org.springframework.context.Support.ReloadableResourceBundleMessageSource,它使用属性文件。我想要一种快速的方法来简化我的任务。由于需要扩展ReloadableResourceBundleMessageSource,您的方法并不快速。我不喜欢用大炮射击来飞行。但是你的回答是正确的,所以我接受了。谢谢