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 }