001/*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005
006package com.nativelibs4java.util;
007
008import java.util.HashMap;
009import java.util.Map;
010
011/**
012 *
013 * @author ochafik
014 */
015public abstract class Cache<K, V> {
016        Map<K, V> map;
017        public Cache() {
018                this(new HashMap<K, V>());
019        }
020        public Cache(Map<K, V> map) {
021                this.map = map;
022        }
023        public synchronized V get(K key) {
024                V value = map.get(key);
025                if (value == null)
026                        map.put(key, value = createValue(key));
027                return value;
028        }
029        public abstract V createValue(K key);
030}