我正在学习 Java,目前正在阅读 Joshua Bloch 的 Effective Java。
在第 29 条中,他讨论了 Map 的参数化类型键以创建类型安全的异构映射。这是代码:
class Favorites {
private Map<Class<?>, Object> favorites = new HashMap<Class<?>, Object>();
public <T> void putFavorite(Class<T> type, T instance) {
if (type == null)
throw new NullPointerException("Type is null");
favorites.put(type, instance);
}
public <T> T getFavorite(Class<T> type) {
return type.cast(favorites.get(type));
}
}
他接着说
恶意客户端可以很容易地破坏收藏夹实例的类型安全,只需使用原始形式的 Class 对象。但是生成的客户端代码在编译时会生成未经检查的警告。
我知道那Class<T>
会被删除到班级。但我不确定恶意客户端如何在编译时破坏类型安全。我尝试了各种方法,但正如我所料,我总是遇到编译器错误。
有人可以告诉我上面引用的那句话中约书亚布洛赫到底是什么意思吗?