2011-09-30 25 views
9

Tôi hơi bối rối bởi CacheBuilderCache được giới thiệu trong ổi 10. Tài liệu gợi ý rằng có thể overwrite values nhưng theo như tôi có thể biết, Cache không chứa bất kỳ phương pháp nào để làm như vậy. Bất kỳ ý tưởng?Làm cách nào để đặt các giá trị() vào lớp Cache của Guava?

Tôi đang cố gắng xây dựng một Bản đồ hết hạn sau 10 giây kể từ khi nó được đọc hoặc ghi lần cuối. Khi một giá trị được tra cứu, tôi mong đợi giá trị được thiết lập trước đó được trả về, hoặc một giá trị mặc định sẽ được tính nếu không có giá trị nào tồn tại.

LƯU Ý: Câu hỏi này đã lỗi thời. Mặc dù Javadoc ở trên cho thấy sự tồn tại của một phương thức Cache.put(K key, V value), nó không tồn tại khi câu hỏi được đăng lần đầu tiên.

Trả lời

6

Từ lâu, có Cache#asMap trả lại chế độ xem ConcurrentMap.

AFAIK, chưa. Nhưng có một thread nhắc rằng Cache.asMap.put được quy hoạch cho phát hành 11.

tôi muốn nói hiện trạng thái cũ của Javadoc là tàn dư nếu nơi phương pháp bộ nhớ cache-thiết lập các 's CacheBuilder tiến hóa từ MapMaker (hiện không được chấp nhận).

Tôi đang cố tạo Bản đồ hết hạn sau 10 giây sau khi được đọc hoặc ghi lần cuối. Khi một giá trị được tra cứu, tôi mong đợi giá trị được thiết lập trước đó được trả về, hoặc một giá trị mặc định sẽ được tính nếu không có giá trị nào tồn tại.

Sử dụng expireAfterAccess(10, TimeUnit.SECONDS) sẽ giữ mục nhập còn hoạt động trong 10 giây sau khi có quyền truy cập. Và các giá trị duy nhất bạn sẽ nhận được là những giá trị được tính bởi CacheLoader (hoặc trước đó hoặc trong get).

+3

Ổi 10.0.1 nên đã sửa lỗi này. http://groups.google.com/group/guava-discuss/browse_thread/thread/f01f7583bb4422d7 – jvdneste

3

Cập nhật nhỏ. Cache.asMap().put() sẽ hiển thị trong ổi 10.1 đôi khi trong tuần đầu tiên của tháng 10 năm 2011. Xem this thread để biết thêm thông tin.

Các vấn đề liên quan