001package org.cache2k;
002
003/*
004 * #%L
005 * cache2k API only package
006 * %%
007 * Copyright (C) 2000 - 2016 headissue GmbH, Munich
008 * %%
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as
011 * published by the Free Software Foundation, either version 3 of the 
012 * License, or (at your option) any later version.
013 * 
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 * 
019 * You should have received a copy of the GNU General Public 
020 * License along with this program.  If not, see
021 * <http://www.gnu.org/licenses/gpl-3.0.html>.
022 * #L%
023 */
024
025/**
026 * Object representing a cache entry. With the cache entry it can be
027 * checked whether a mapping in the cache is present, even if the cache
028 * holds null or an exception.
029 *
030 * <p>After retrieved the entry instance does not change the values, even
031 * if the value for its key is updated in the cache.
032 *
033 * <p>Design remark: The cache is generally also aware of the time the
034 * object will be refreshed next or when it expired. This is not exposed
035 * to applications by intention.
036 *
037 * @author Jens Wilke; created: 2014-03-18
038 */
039public interface CacheEntry<K, T> {
040
041  K getKey();
042
043  T getValue();
044
045  Throwable getException();
046
047  /**
048   * Time the entry was last updated either by a fetch via the CacheSource
049   * or by a put. If the entry was never fetched yet 0 is returned.
050   */
051  long getLastModification();
052
053}