V (Object key) { Map<K, V> map = getMap(); K k = notNull(key); V value = map.get(k); if (value == null) { RecursionGuard.StackStamp stamp = RecursionManager.markStack(); //noinspection unchecked value = create((K)key); if (stamp.mayCacheNow()) { V v = notNull(value); map.put(k, v); } } return nullize(value); }