2013-10-31 9 views
5

guavas CacheBuilderを使用したいと思いますが、これをどのように実装するかの明示的な例は見つかりません。guava CacheBuilderの使い方は?

ドキュメントは、次のコードを述べる:

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() 
     .maximumSize(1000) 
     .build(
      new CacheLoader<Key, Graph>() { 
      public Graph load(Key key) throws AnyException { 
       return createExpensiveGraph(key); 
      } 
      }); 

質問:このcreateExpensiveGraph(key)方法は何ですか?これはHashMap<Key, Value>マッピングを返すメソッドですか? keyの値はどうすればよいですか?

この方法でList<String>を返すこともできますか?keyの値を使用する必要はありませんか?

Graph get(Key key) { 
    Graph result = get(key); 
    if(null == result) { 
     result = createNewGraph(key); 
     put(key, result); 
    } 
    return result; 
} 

プラスあなたは、マルチスレッド環境でこのコードを使用するときに持っている通常の同期の問題:キャッシュの

+0

CacheLoaderのAPIを参照し、メソッドを使用する理由を明確に示すメソッドをロードしますか? http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheLoader.html#load(K) createExpensiveGraphは、代わりにGraphオブジェクトを返すため、hashMapを返しません。 –

+0

それはあなたが結果をキャッシュしようとしている機能です。 –

答えて

17

アイデアは、あなたは通常、このような問題を持っているということです。

グアバはあなたの定型文を実行します。 createNewGraph()を実装するだけです。 Javaの仕組みは、インタフェースを実装する必要があることを意味します。この場合、インターフェイスはCacheLoaderです。

キャッシュ全体がマップのように見える場合は、CacheLoaderは、マップ内にキーが見つからない場合に呼び出されるコールバックです。ローダーはキーを取得します(通常、このキーに必要なオブジェクトを作成するのに有益な情報が含まれているため)。get()が将来返す値を返します。

関連する問題