001 /* 002 * Copyright 2010 Google Inc. All Rights Reserved. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS-IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package com.google.common.collect; 018 019 import com.google.common.annotations.Beta; 020 import com.google.common.annotations.GwtCompatible; 021 import com.google.common.annotations.GwtIncompatible; 022 import com.google.common.base.Function; 023 024 import java.util.concurrent.ConcurrentMap; 025 import java.util.concurrent.TimeUnit; 026 027 /** 028 * A class exactly like {@link MapMaker}, except restricted in the types of maps 029 * it can build. This type is returned by {@link MapMaker#evictionListener} to 030 * prevent the user from trying to build a map that's incompatible with the key 031 * and value types of the listener. 032 * 033 * @param <K0> the base type for all key types of maps built by this map maker 034 * @param <V0> the base type for all value types of maps built by this map maker 035 * @author Kevin Bourrillion 036 * @since 7 037 */ 038 @Beta 039 @GwtCompatible(emulated = true) 040 public abstract class GenericMapMaker<K0, V0> { 041 // Set by MapMaker, but sits in this class to preserve the type relationship 042 @GwtIncompatible("To be supported") 043 MapEvictionListener<K0, V0> evictionListener; 044 045 // No subclasses but our own 046 GenericMapMaker() {} 047 048 /** 049 * See {@link MapMaker#initialCapacity}. 050 */ 051 public abstract GenericMapMaker<K0, V0> initialCapacity(int initialCapacity); 052 053 /** 054 * See {@link MapMaker#maximumSize}. 055 * 056 * @since 8 057 */ 058 @Beta 059 @GwtIncompatible("To be supported") 060 public abstract GenericMapMaker<K0, V0> maximumSize(int maximumSize); 061 062 /** 063 * See {@link MapMaker#concurrencyLevel}. 064 */ 065 @GwtIncompatible("java.util.concurrent.ConcurrentHashMap concurrencyLevel") 066 public abstract GenericMapMaker<K0, V0> concurrencyLevel( 067 int concurrencyLevel); 068 069 /** 070 * See {@link MapMaker#weakKeys}. 071 */ 072 @GwtIncompatible("java.lang.ref.WeakReference") 073 public abstract GenericMapMaker<K0, V0> weakKeys(); 074 075 /** 076 * See {@link MapMaker#softKeys}. 077 */ 078 @GwtIncompatible("java.lang.ref.SoftReference") 079 public abstract GenericMapMaker<K0, V0> softKeys(); 080 081 /** 082 * See {@link MapMaker#weakValues}. 083 */ 084 @GwtIncompatible("java.lang.ref.WeakReference") 085 public abstract GenericMapMaker<K0, V0> weakValues(); 086 087 /** 088 * See {@link MapMaker#softValues}. 089 */ 090 @GwtIncompatible("java.lang.ref.SoftReference") 091 public abstract GenericMapMaker<K0, V0> softValues(); 092 093 /** 094 * See {@link MapMaker#expiration}. 095 */ 096 // TODO(user): deprecate 097 public abstract GenericMapMaker<K0, V0> expiration( 098 long duration, TimeUnit unit); 099 100 /** 101 * See {@link MapMaker#expireAfterWrite}. 102 * 103 * @since 8 104 */ 105 @Beta 106 public abstract GenericMapMaker<K0, V0> expireAfterWrite( 107 long duration, TimeUnit unit); 108 109 /** 110 * See {@link MapMaker#expireAfterAccess}. 111 * 112 * @since 8 113 */ 114 @Beta 115 @GwtIncompatible("To be supported") 116 public abstract GenericMapMaker<K0, V0> expireAfterAccess( 117 long duration, TimeUnit unit); 118 119 /* 120 * Note that MapMaker's evictionListener() is not here, because once you're 121 * interacting with a GenericMapMaker you've already called that, and 122 * shouldn't be calling it again. 123 */ 124 125 /** 126 * See {@link MapMaker#makeMap}. 127 */ 128 public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> makeMap(); 129 130 /** 131 * See {@link MapMaker#makeComputingMap}. 132 */ 133 public abstract <K extends K0, V extends V0> ConcurrentMap<K, V> 134 makeComputingMap(Function<? super K, ? extends V> computingFunction); 135 }