14

.propertiesJavaファイルに重複するキーがある場合の定義された動作は何ですか?

thing.valueA = 1
thing.valueB = 2

thing.valueA = 99

どの値が使用されることが保証されていthing.valueAますか?1、99、または未定義?この動作はどこかに文書化されていますか?

NB。重複するキーがベストプラクティスと見なされるかどうかは尋ねていません。

4

4 に答える 4

8

の私の理解に基づいてProperties、ロード メソッドはこれと同様の方法で動作します。

  1. ファイルを行に分割し、
  2. 次の行を見てください。
  3. いくつかのルールを使用してキーと値のペアを決定します (こちらを参照)
  4. メソッドと同様のput()方法で、キーと値のペアを Properties インスタンスに入れます

これは、例が表示されることを意味します99

load メソッドは基本的に、座って入力したかのように機能するように設計されています。

propInstance.put("Key", "Value");
propInstance.put("Other", "Thing");
etc etc

この動作を理解するには、Hashtable.put()重複を新しい値で更新することを指定しているドキュメントを参照してください。Hashtable は Properties のスーパークラスであるため、Properties もこの動作を複製します。

于 2012-09-24T03:22:15.423 に答える
2

これは私にとってはうまくいきました。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);
   }
}
于 2013-09-13T23:33:01.823 に答える
0

通常は最後の値を取りますが、あなたの場合は 99 になります。

ありがとう、ラガヴァン

于 2013-10-04T05:12:14.673 に答える