2017-08-12 10 views
1

私はキャッシュを持っており、新しい要素を入れています。キャッシュにアイテムを置くたびに、削除リスナーがトリガーされます。削除リスナーが実際に削除または削除されたときにのみトリガーされるようにするにはどうすればよいですか?Guavaキャッシュ:プッシュ操作トリガーリスナー

Cache<String, String> cache = CacheBuilder.newBuilder() 
//  .expireAfterWrite(5, TimeUnit.MINUTES) 
    .removalListener((RemovalListener<String, String>) notification -> { 
     System.out.println("Why"); 
    }) 
    .build(); 
} 

cache.put("a","b"); // triggers removal listener 

ここに何か不足していますか?なぜそれはPutListenerと呼ばれていませんか?

+2

あなたは(notification.getCauseを確認しましたか)?削除通知からキーと値を印刷しましたか? –

+0

キーが交換されていました。私の鍵ははっきりしていたと思ったが、そうではなかった。お手伝いありがとう。 – newToScala

答えて

1

実際の原因を見つけるには、RemovalNotification.getCause() methodを使用する必要があります。すべてのイベント通知を処理するために

は、«置き換えエントリー»イベント通知を除き、次ドラフトの実装を検討してください。

class RemovalListenerImpl implements RemovalListener<String, String> { 
    @Override 
    public void onRemoval(final RemovalNotification<String, String> notification) { 
     if (RemovalCause.REPLACED.equals(notification.getCause())) { 
      // Ignore the «Entry replaced» event notification. 
      return; 
     } 

     // TODO: Handle the event notification here. 
    } 
} 
関連する問題