純粋に機能的なデータ構造は、ユーザーの観点からは変更できません。したがって、ハッシュ マップからキーを取得して待機し、同じキーを再度取得する場合は、同じ値を取得する必要があります。鍵を握れるから、消えない。
それが機能する唯一の方法は、API が次世代を提供し、コンテナーの過去のバージョンへのすべての参照が解放されるまで値が収集されない場合です。データ構造のユーザーは、新しい世代が弱く保持されている値を解放するよう定期的に要求することが期待されます。
EDIT(コメントに基づく):あなたが望む動作は理解していますが、オブジェクトを解放するマップでこのテストに合格することはできません:
FunctionalWeakHashMap map = new FunctionalWeakHashMap();
{ // make scope to make o have no references
Object o = new SomeObject();
map["key"] = o;
} // at this point I lose all references to o, and the reference is weak
// wait as much time as you think it takes for that weak reference to collect,
// force it, etc
Assert.isNotNull(map["key"]); // this must be true or map is not persistent
私は、このテストが合格する可能性があることを示唆しています
FunctionalWeakHashMap map = new FunctionalWeakHashMap();
{ // make scope to make o have no references
Object o = new SomeObject();
map["key"] = o;
} // at this point I lose all references to o, and the reference is weak in the map
// wait as much time as you think it takes for that weak reference to collect,
// force it, etc
map = map.nextGen();
Assert.isNull(map["key"]);