【发布时间】:2015-03-31 11:54:07
【问题描述】:
伙计们,
有什么简单的方法可以在非泛型类中添加泛型类。
基本上,缓存管理器将拥有 Cache 类的映射,该映射使用适当的泛型实现。
但是在下面的类中,我们通过 get 方法返回(getCache 方法)缓存,它需要在调用者位置显式转换如何避免它。
例如
public class CacheManager {
private Map<String, Cache<?,?>> cacheMap = new HashMap<String, Cache<?,?>>();
public Cache<?,?> getCache(String cacheName) {
return cacheMap.get(cacheName);
}
public void addCache(String cacheName,Cache<?,?> cache) {
cacheMap.put(cacheName, cache);
}
}
【问题讨论】:
-
如果没有未经检查的强制转换(在这种特殊情况下是类型安全的 IMO),就无法做到这一点。您可以通过向通配符添加边界来增加类型安全性。
-
是否存在通配符类型,因为单个 CacheManager 实例将存储许多不同类型的缓存? (即为什么它不是 CacheManager
?) -
Rohit 能否举例说明如何为通配符添加更多边界。我现在正在做显式转换 (Cache
)cacheManager.getCache("test") Erik,你是对的,我有不同的缓存,所以我不能将泛型用于 CacheManager。请提出更好的建议。 -
您可以将
cacheMap成员的类型参数设为Object(Map<String,Cache<Object,Object>>)。然后编译器应该停止抱怨,但显然,这个解决方案有code smell。