2011-08-17 43 views
2

我想为缓存容器工厂,像Java的泛型容器厂

public interface CacheMapFactory { 
    public Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass); 
} 

有可能实现简单的测试

public class InMemoryCacheMapFactory implements CacheMapFactory { 
    public Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass) { 
     return new HashMap<K,V>(); 
    } 
} 

其他实现可能是,例如,基于Memcached或其他一些键值存储。

是否有可能将上面的伪代码转换为可用所需语义编译的东西?如果添加另一个<K,V>的方法

回答

3

您的代码将编译:

public interface CacheMapFactory { 
    public <K,V> Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass); 
} 

public class InMemoryCacheMapFactory implements CacheMapFactory { 
    public <K,V> Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass) { 
    return new HashMap<K,V>(); 
    } 
} 

我不知道什么tag会做,但我想这是进一步实施的一部分。

此外,你可以依靠类型推理是这样的:

public interface CacheMapFactory { 
    public <K,V> Map<K,V> createCacheMap(String tag); 
} 

public class InMemoryCacheMapFactory implements CacheMapFactory { 
    public <K,V> Map<K,V> createCacheMap(String tag) { 
    return new HashMap<K,V>(); 
    } 
} 

public class Test { 
    public void test() { 
    CacheMapFactory f = new InMemoryCacheMapFactory(); 
    Map<String, Long> m = f.createCacheMap("mytag"); //K and V are inferred from the assignment 
    } 
} 
1

如果你只是想编译它,那么你可以只是这样做:

public interface CacheMapFactory { 
    public <K, V> Map<K,V> createCacheMap(String tag, Class<K> kClass, Class<V> vClass); 
}