2011-08-17 62 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); 
}