はJDKからProperties.list
の実装です:印刷前にProperties.listのコピーテーブルがなぜですか?ここ
public void list(PrintWriter out) {
out.println("-- listing properties --");
Hashtable<String,Object> h = new Hashtable<>();
enumerate(h);
for (Enumeration<String> e = h.keys() ; e.hasMoreElements() ;) {
String key = e.nextElement();
String val = (String)h.get(key);
if (val.length() > 40) {
val = val.substring(0, 37) + "...";
}
out.println(key + "=" + val);
}
}
ライン用
Hashtable<String,Object> h = new Hashtable<>();
enumerate(h);
は何ですか?コピーを作成してそこからデータを読み込む代わりに、元のテーブルを使用するだけではありませんか?
GeraldMückeさんの回答(現在削除されている)は正しいです。その理由は、デフォルトのセットを持つ 'Properties'オブジェクトと関係があります。デフォルトオブジェクトのセットは、それ自体が' Properties'オブジェクトです。既定のチェーンの後のエントリは、以前のエントリによってスクリーニングされます。'enumerate'メソッドはエントリーを再帰的に1つのテーブルに平坦化し、それを出力します。フラット化されたコピーを作成することは、デフォルトのセマンティクスを実装する最も簡単な方法です。 –