.properties
Javaファイルに重複するキーがある場合の定義された動作は何ですか?
thing.valueA = 1
thing.valueB = 2
thing.valueA = 99
どの値が使用されることが保証されていthing.valueA
ますか?1、99、または未定義?この動作はどこかに文書化されていますか?
NB。重複するキーがベストプラクティスと見なされるかどうかは尋ねていません。
.properties
Javaファイルに重複するキーがある場合の定義された動作は何ですか?
thing.valueA = 1
thing.valueB = 2
thing.valueA = 99
どの値が使用されることが保証されていthing.valueA
ますか?1、99、または未定義?この動作はどこかに文書化されていますか?
NB。重複するキーがベストプラクティスと見なされるかどうかは尋ねていません。
の私の理解に基づいてProperties
、ロード メソッドはこれと同様の方法で動作します。
put()
方法で、キーと値のペアを Properties インスタンスに入れますこれは、例が表示されることを意味します99
。
load メソッドは基本的に、座って入力したかのように機能するように設計されています。
propInstance.put("Key", "Value");
propInstance.put("Other", "Thing");
etc etc
この動作を理解するには、Hashtable.put()
重複を新しい値で更新することを指定しているドキュメントを参照してください。Hashtable は Properties のスーパークラスであるため、Properties もこの動作を複製します。
これは私にとってはうまくいきました。Properties を使用する代わりに、NaehasProperties をインスタンス化し、HashTable put() をオーバーライドしました。
/**
* Purpose: Properties doesn't detect duplicate keys. So this exists.
* @author shaned
*/
package com.naehas.tests.configs;
import java.util.Properties;
import org.apache.log4j.Logger;
public class NaehasProperties extends Properties
{
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(NaehasProperties.class);
public NaehasProperties()
{
super();
}
/**
* @param defaults
*/
public NaehasProperties(Properties defaults)
{
super(defaults);
}
/**
* Overriding the HastTable put() so we can check for duplicates
*
*/
public synchronized Object put(Object key, Object value)
{
// Have we seen this key before?
//
if (get(key) != null)
{
StringBuffer message = new StringBuffer("Duplicate key found: " + key + " with value: " + value);
message.append(". Original value is: " + (String) get(key));
log.error(message.toString());
// Setting key to null will generate an exception and cause an exit.
// Can not change the signature by adding a throws as it's not compatible
// with HashTables put().
//
key = null;
}
return super.put(key, value);
}
}
通常は最後の値を取りますが、あなたの場合は 99 になります。
ありがとう、ラガヴァン