作为替代方案,您可以使用少量的非类型安全代码以强制执行约束的方式封装:
class Cache { private Map<Class<?>, Map<Long, ?>> items = new HashMap<Class<?>, Map<Long, ?>>(); private <T> Map<Long, T> getItems(Class<T> type) { @SuppressWarnings("unchecked") Map<Long, T> result = (Map<Long, T>) items.get(type); if (result == null) { result = new HashMap<Long, T>(); items.put(type, result); } return (Map<Long, T>) result; } public <T> void addItem(Class<T> type, Long id, T item) { getItems(type).put(id, item); } public <T> T getItem(Class<T> type, Long id) { return type.cast(getItems(type).get(id)); }}
该
type.cast()在
getItem()不需要编译器不会抱怨,但它会帮助赶上了错误的类型进入缓存早期的对象。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)