001    /*
002     * To change this template, choose Tools | Templates
003     * and open the template in the editor.
004     */
005    
006    package com.nativelibs4java.util;
007    
008    import java.util.HashMap;
009    import java.util.Map;
010    
011    /**
012     *
013     * @author ochafik
014     */
015    public 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    }