5

要素への弱い参照を持つ並行セットが必要でした。Guava を使用してこれを行うことを考えましたMapMaker:

Set<Object> concurrentSet = Collections.newSetFromMap(
    new MapMaker<Object, Boolean>().weakKeys().makeMap());

Guava は、脆弱なキーを持つ ID ハッシュを自動的に提供します。MapMakerただし、型パラメーターを許可しないことが判明しました。

file.java:123 type com.google.common.collect.MapMaker does not take parameters
                new MapMaker<Object, Boolean>().weakKeys().makeMap());
                            ^

要素への弱い参照を使用して同時セットを取得する方法はありますか?

4

3 に答える 3

5

ドキュメントで説明されているように、MapMakerはジェネリック型ではありません。です<Object, Object>。これは、キーまたは値として何でも入れることができることを意味します。取得するときにキャストする必要があるだけです。リンクを引用:

   ConcurrentMap<Request, Stopwatch> timers = new MapMaker()
       .concurrencyLevel(4)
       .weakKeys()
       .makeMap();

エントリでを取得するSetにはMap、 を呼び出すだけMap#entrySet()です。

于 2013-04-12T18:50:16.363 に答える
1

元のアプローチは正常に機能します。型パラメーターを呼び出しに配置するだけですmakeMap()

Set<Object> concurrentSet = Collections.newSetFromMap(
new MapMaker().weakKeys().<Object, Boolean> makeMap());

Java のあまり使用されない一般的なメソッド呼び出し構文を使用します。 Java 仕様

于 2015-08-04T11:09:29.320 に答える