19
Properties myProp = new Properties();
myProp.put("material", "steel");

Properties prop1 = new Properties(myProp);

System.out.println(prop1.get("material") + ", " + prop1.getProperty("material"));
// outputs "null, steel"

get は、オブジェクトのエントリ/属性を返すという意味で getProperty に似ていませんか? get の使用時に「steel」が返されないのはなぜですか?

4

3 に答える 3

26

getから継承されHashtable、 を返すように宣言されてObjectいます。

getPropertyによって導入されProperties、 を返すように宣言されてStringいます。

getPropertyのコンストラクタに渡すことができる「デフォルト」プロパティを参照することに注意してくださいPropertiesgetしません。ただし、ほとんどの場合、それらは同じ値を返します。あなたが与えた例ではデフォルトのバッキングプロパティを使用しています:

  • prop1のエントリが直接含まれていないため、が null を返すのは"material"なぜですか。get
  • myProp にはのエントリが含まれているため"material"、 を呼び出すとprop1.getProperty("material")、それを直接持っていないことがわかり、myProp代わりにチェックインして"steel"そこを見つけます。
于 2012-06-19T15:34:32.820 に答える
4

ドキュメントを見ると、それgetが継承され、戻りますが、のメンバーでObjectあり、.getPropertyPropertiesString

一見、彼らは同じものを返すはずですが、再びドキュメントから:

このプロパティ リストにキーが見つからない場合は、既定のプロパティ リストとその既定値が再帰的にチェックされます。

getProperty見つからない場合はデフォルトを返すため、使用するのが最善です。

于 2012-06-19T15:38:12.240 に答える
0

2 番目のPropertiesオブジェクト (propsまたはprop1?) には、プロパティが直接追加されていません。myPropデフォルトとしてのみ使用します。したがって、これらの値は backing に追加されることはありませんHashMapProperties.getProperty()バッキング HashMap に「マテリアル」が見つからないため、デフォルトで検索できます。ただし、継承されたものはバッキング HashMapHashMap.get() のみを検索し、コンストラクターに渡したデフォルトは検索しません。

于 2012-06-19T15:45:39.143 に答える